from flask_sqlalchemy import SQLAlchemy
from flask import Flask
app = Flask(__name__)
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:@127.0.0.1/database1?charset=utf8mb4'
app.config['SQLALCHEMY_BINDS'] = {
# 'database1': 'mysql+pymysql://root:@127.0.0.1/database1?charset=utf8mb4'
'database2': 'mysql+pymysql://root:@127.0.0.1/database2?charset=utf8mb4'
}
db = SQLAlchemy(app)
class Table1(db.Model):
__tablename__ = "table1"
# __bind_key__ = "database1"
# __table_args__ = {'schema': 'database1'}
id = db.Column(db.Integer, primary_key=True)
relation_id = db.Column(db.Integer, db.ForeignKey('database2.table2.id'))
class Table2(db.Model):
__bind_key__ = "database2"
__tablename__ = "table2"
__table_args__ = {'schema': 'database2'}
id = db.Column(db.Integer, primary_key=True)
db.create_all()
看了文档,说没有 bind_key 就默认用 SQLALCHEMY_DATABASE_URI,但是在以上测试的时候发现不行,不能建表,如果把以上代码中的注释全部去掉,就可以了,这是为什么,然道 SQLALCHEMY_DATABASE_URI 没用了吗?
还有,这是在有 relation_id 这个 foreign key 的情况下才有这种情况,如果把这个 foreign key 删了,以上代码也可以运行。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.