the*_*ish 3 sqlalchemy flask-sqlalchemy
我有一个应用程序目前工作正常自动映射一个数据库,但我现在也需要访问另一个数据库。我试图在这里遵循 Flask-SQLAlchemy 文档:http : //flask-sqlalchemy.pocoo.org/2.1/binds/,但它似乎不适用于 automap_base。
我所做的唯一更改SQLALCHEMY_BINDS是__bind_key__在models.py中创建和添加。我得到的错误是
sqlalchemy.exc.ArgumentError: Mapper Mapper|Table2|table2 could not assemble any primary key columns for mapped table 'table2'
Run Code Online (Sandbox Code Playgroud)
但是,两个表都有一个主键列,如果我去掉SQLALCHEMY_BINDS,将 URI 设置为db2,并且只有table2在models.py 中,一切正常。
我显然做错了什么,但我不知道它是什么。它看起来像瓶还在寻找table2在db1。我认为我的问题是还需要对__init__.py进行一些更改,但我不知道那会是什么。
配置文件
SQLALCHEMY_DATABASE_URI = 'mysql://user@host/db1'
SQLALCHEMY_BINDS = {
'otherDB': 'mysql://user@host/db2',
}
Run Code Online (Sandbox Code Playgroud)
__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)
Run Code Online (Sandbox Code Playgroud)
模型.py
class Table1(db.Model):
__tablename__ = 'table1'
class Table2(db.Model):
__bind_key__ = 'otherDB'
__tablename__ = 'table2'
Run Code Online (Sandbox Code Playgroud)
Automap是sqlalchemy的扩展,用于将现有数据库反映到新模型中。它没有被烘烤成flask-sqlalchemy。请在此处查看问题。您可以Flask-SQLAlchemy像这样连接到多个数据库:
__init__.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
Run Code Online (Sandbox Code Playgroud)
模型.py
db.reflect() # reflection to get table meta
class Table1(db.Model):
__tablename__ = 'table1'
class Table2(db.Model):
__tablename__ = 'table2'
__bind_key__ = 'otherDB'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4128 次 |
| 最近记录: |