使用Flask-SQLAlchemy

时间:2016-12-18 06:19:43

标签: sqlalchemy flask-sqlalchemy

我有一个应用程序目前工作正常自动化一个数据库,但我现在也需要访问另一个数据库。我尝试在此处遵循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 ,一切正常。

我显然做错了什么,但我不知道它是什么。看起来Flask仍然在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'

1 个答案:

答案 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'