【问题标题】:Automap multiple databases with Flask-SQLAlchemy使用 Flask-SQLAlchemy 自动映射多个数据库
【发布时间】:2016-12-18 23:10:36
【问题描述】:

我有一个应用程序目前运行良好自动映射一个数据库,但我现在也需要访问另一个数据库。我尝试在此处遵循 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,并且models.py中只有table2 ,一切正常。

我显然做错了什么,但我不知道是什么。看起来 Flask 仍在 db1 中寻找 table2。我认为我的问题是也需要对 __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'

【问题讨论】:

    标签: sqlalchemy flask-sqlalchemy


    【解决方案1】:

    Automapsqlalchemy 的扩展,用于将现有数据库反映到新模型中。它还没有被烘焙到flask-sqlalchemy。请参阅问题here。您可以使用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
    

    models.py

    db.reflect() # reflection to get table meta
    
    
    class Table1(db.Model):
        __tablename__ = 'table1'
    
    
    class Table2(db.Model):
        __tablename__ = 'table2'
        __bind_key__ = 'otherDB'
    

    【讨论】:

      猜你喜欢
      • 2020-02-17
      • 2013-02-07
      • 1970-01-01
      • 2017-07-15
      • 2016-08-21
      • 1970-01-01
      • 2012-08-22
      • 2013-06-20
      • 2011-01-19
      相关资源
      最近更新 更多