Как динамически переключать sqlalchemy модель через графеновое реле?
В нашей системе у нас есть две похожие (но не одинаковые) базы данных. Итак, я построил эти модели sqlalchemy:
# base.py
Base = declarative_base()
class T1(Base):
__tablename__ = 't1'
id = Column(Integer, primary_key=True)
name = Column(String)
# production1.py
from . import base
class T1(base.T1):
status1 = Column(String)
# production2.py
from . import base
class T1(base.T1):
status2 = Column(String)
# sessions.py
engine1 = create_engine(**production1_params)
session1 = scoped_session(sessionmaker(bind=engine1))
engine2 = create_engine(**production2_params)
session2 = scoped_session(sessionmaker(bind=engine2))
Тогда я могу получить доступ к другой базе данных:
import production1, production2
session1().query(production1.T1)
session2().query(production2.T2)
Теперь я хочу построить нашу систему API с помощью graphql. Во-первых, я наследую от SQLAlchemyConnectionField
поддерживать переключение баз данных.
class SwitchableConnectionField(SQLAlchemyConnectionField):
def __init__(self, type, *args, **kwargs):
kwargs.setdefault('db_type', String())
super
@classmethod
def get_query(self, model, info, sort=None, **args):
session = get_query(args['db_type'])
query = session.query(model)
...
Но когда я хочу определить свои узлы, я обнаружил, что определения должны быть:
import production1, production2
class Production1Node(SQLAlchemyObjectType):
class Meta:
model = production1,T1
interfaces = (Node,)
class Production2Node(SQLAlchemyObjectType):
class Meta:
model = production2.T1
interfaces = (Node,)
Существует два определения узлов для поддержки разных баз данных. Но я хочу сделать что-то вроде:
import base
class ProductionNode(SQLAlchemyObjectType):
class Meta:
model = base.T1
interfaces = (Node,)
Так что я могу переключать аналогичные модели во время выполнения. Тем не менее, хотя я пытаюсь унаследовать от Node
Я не могу реализовать это. Кто-нибудь знает, что мне делать?