2016-12-18 23 views
1

私は現在、アプリケーションが正常に動作していますが、1つのデータベースを自動マッピングしていますが、別のデータベースにもアクセスする必要があります。私はここでFlask-SQLAlchemyの文書に従うことを試みた:http://flask-sqlalchemy.pocoo.org/2.1/binds/、しかしそれはautomap_baseと働かないようである。Flask-SQLAlchemyを使用して複数のデータベースをオートマップする

私が行った変更は、SQLALCHEMY_BINDSを作成し、をmodelschesに追加することでした。私が手にエラーが

sqlalchemy.exc.ArgumentError: Mapper Mapper|Table2|table2 could not assemble any primary key columns for mapped table 'table2' 

は、しかし、両方のテーブルは主キー列を持っている、と私はSQLALCHEMY_BINDSを取り除く場合、db2のものにURIを設定し、のみmodels.pytable2、すべてを持っています正常に動作します。

私は明らかに何か間違っていますが、私はそれが何であるか分かりません。フラスカはまだtable2db1に探しているようです。私は自分の問題は、いくつかの変更を__init__.pyにする必要があると考えていますが、私はそれが何であるかはわかりません。

config.py

SQLALCHEMY_DATABASE_URI = 'mysql://[email protected]/db1' 
SQLALCHEMY_BINDS = { 
    'otherDB':  'mysql://[email protected]/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

Automapsqlalchemyの拡張で、既存のデータベースを新しいモデルに反映します。 flask-sqlalchemyには焼かれていません。 Plzは、問題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' 
関連する問題