Tôi đang cố gắng để làm một cross-cơ sở dữ liệu tham gia Flask-SQLAlchemy:Cross-cơ sở dữ liệu tham gia Flask-SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = '...Master...'
app.config['SQLALCHEMY_BINDS'] = { 'Billing': '...Billing...' }
db = SQLAlchemy(app)
class Account(db.Model):
__tablename__ = 'Accounts'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(255))
class Setting(db.Model):
__tablename__ = 'Settings'
AccountId = db.Column(db.Integer, db.ForeignKey(Account.id), primary_key=True)
Enabled = db.Column(db.Boolean)
class BillingAccount(db.Model):
__tablename__ = 'Account'
__bind_key__ = 'Billing'
id = db.Column(db.Integer, primary_key=True)
AccountId = db.Column(db.Integer, db.ForeignKey(Account.id))
currency = db.Column(db.Integer)
class AccountSetting(db.Model):
__table__ = db.join(Account, AccountSetting)
id = db.column_property(Account.id, AccountSetting.AccountId)
username = Account.username
enabled = Setting.Enabled
class AccountSettingBilling(db.Model):
__table__ = db.join(Account, AccountSetting).join(BillingAccount)
id = db.column_property(Account.id, AccountSetting.AccountId, BillingAccount.AccountId)
username = Account.username
enabled = Setting.Enabled
currency = BillingAccount.currency
Với điều này tôi thành công có thể truy vấn AccountSetting.query.all() nhưng không AccountSettingBilling .query.all(), lỗi với lỗi 208 (MSSQL cho 'đối tượng không tồn tại').
Nếu tôi kiểm tra SQL được tạo, tôi có thể thấy rõ ràng rằng nó đang thực hiện JOIN trên Account.AccountId = Accounts.id khi tôi muốn thấy một số tham chiếu đến Thanh toán, ví dụ: Billing.Account.AccountId = Accounts.id.
Sau khi theo dõi Cross database join in sqlalchemy và http://pythonhosted.org/Flask-SQLAlchemy/binds.html, có vẻ như tôi đã làm mọi thứ một cách chính xác. Đưa cái gì?