跨多个数据库(SQL Server)表的sqlalchemy关系

时间:2018-07-11 10:43:20

标签: sql-server sqlalchemy foreign-keys flask-sqlalchemy pymssql

我知道问题听起来可能与已经存在的问题相似,但是我没有从中获得适当的解决方案。

我想知道的是如何在两个分别名为 master_db slave_db 的不同数据库(两个数据库均为Sql Server)的两个表之间创建关系。 >

应用程序中使用sqlalchemy __bind__参数支持多个数据库,而pymssql用于连接

model1.py

from sqlalchemy import db
from sqlalchemy import Column, Unicode

class Profile(db.Model):
    __tablename__ = 'Profile'
    __bind_key__ = 'slave_db'

    user_id = Column(Integer, nullable=False)
    status_code = Column(Unicode(20), nullable=False)
    user_status = relationship('UserStatus',
                  primaryjoin='UserStatus.code == foreign(Profile.status_code)',
                  uselist=False,
                  lazy='joined',
                  order_by='asc(UserStatus.code)',
                  viewonly=True,
                  )

model2.py

class UserStatus(db.Model):
    __tablename__ = 'UserStatus'

    __table_args__ = (
        {"schema": "dbo"}
    )
    __bind_key__ = 'master_db'

    code = Column(Unicode(50), primary_key=True, nullable=False)
    desc = Column(Unicode(50), nullable=False)

我在个人资料模型中收到 user_status关系的错误。

数据库中的数据如下:

Profile:
    user_id, status_code
    1      , 10
    2      , 10
    3      , 20
    4      , 30
UserStatus:
    code, desc
    10  , Pending
    20  , Active
    30  , InActive

期望Outpur为:

Profile:
    1, 10, Pending
    2, 10, Pending
    3, 20, Active
    4, 30, InActive   

注意::如果两个表都在同一个数据库中,即 slave_db

,则 user_status 可以完美地工作

请不要提供db.session.execute(“ raw SQL Query”)之类的解决方案我无法使用原始sql查询获取数据,因为已经有很多关联实施,我将无法为其编写原始sql查询。

收到的错误为: sqlalchemy.exc.ProgrammingError:(pymssql.ProgrammingError)(208,b“无效的对象名称'dbo.UserStatus'.DB-Lib错误消息208,严重性16:\ n常规SQL Server错误:检查来自SQL Server的消息\ n” )

0 个答案:

没有答案