В нашей системе у нас есть две похожие (но не одинаковые) базы данных.Итак, я построил эти модели 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
, я не могу реализовать его.Кто-нибудь знает, что мне делать?