我有一个应用程序目前工作正常自动化一个数据库,但我现在也需要访问另一个数据库。我尝试在此处遵循Flask-SQLAlchemy文档:http://flask-sqlalchemy.pocoo.org/2.1/binds/,但它似乎不能与automap_base一起使用。
我所做的唯一更改是创建SQLALCHEMY_BINDS
并在 models.py 中添加__bind_key__
。我得到的错误是
sqlalchemy.exc.ArgumentError: Mapper Mapper|Table2|table2 could not assemble any primary key columns for mapped table 'table2'
但是,两个表都有一个主键列,如果我摆脱SQLALCHEMY_BINDS
,请将URI设置为db2
的URI,并且模型中只有table2
.py ,一切正常。
table2
中寻找db1
。我认为我的问题是需要对 __ init __。py 进行一些更改,但我不知道那会是什么。
config.py
SQLALCHEMY_DATABASE_URI = 'mysql://user@host/db1'
SQLALCHEMY_BINDS = {
'otherDB': 'mysql://user@host/db2',
}
__ init __。py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.ext.automap import automap_base
app = Flask(__name__)
app.config.from_object('config')
db = SQLAlchemy(app)
db.Model = automap_base(db.Model)
from app import models
db.Model.prepare(db.engine, reflect=True)
models.py
class Table1(db.Model):
__tablename__ = 'table1'
class Table2(db.Model):
__bind_key__ = 'otherDB'
__tablename__ = 'table2'
答案 0 :(得分:3)
Automap
是 sqlalchemy 的扩展,用于将现有数据库反映到新模型中。它尚未融入flask-sqlalchemy
。 Plz看到问题here。您可以使用Flask-SQLAlchemy
连接到多个数据库,如下所示:
<强> __初始化__。PY 强>
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config.from_object('config')
db = SQLAlchemy(app)
from app import models
if __name__ == "__main__":
# show the table schema
print m3.Table1.__table__.c
print m3.Table2.__table__.c
<强> models.py 强>
db.reflect() # reflection to get table meta
class Table1(db.Model):
__tablename__ = 'table1'
class Table2(db.Model):
__tablename__ = 'table2'
__bind_key__ = 'otherDB'