0
私のフラスコアプリケーションは1つのデータベース(db1)を持ちますが、新しいデータベース(db2)をバインドするようになりました。alembic autogenerate Flask-SQLAlchemyバインドのメタデータを取得
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://[email protected]:3306/db1'
SQLALCHEMY_BINDS = {
'test': 'mysql+pymysql://[email protected]:3306/db2'
}
db = SQLAlchemy()
class table1(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
.......
class table10(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
class table11(db.Model):
__bind_key__ = 'db2'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
......
class table20(db.Model):
__bind_key__ = 'db2'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
私は、自動検出にアレンビック自動生成機能を使用したいと別にデシベル1およびDB2の移行を生成するが、db.metadata
は、すべてのテーブルのメタデータを取得しますが、どのようにだけバインドDBのメタデータを取得するには?
ありがとう@davidism help!私はinclude_symbolを使ってそれを作ることができます。
def include_symbol(tablename, schema):
return tablename in ('table1', 'table2'.......'table10') # for db1
# return tablename not in ('table1', 'table2'.......'table10') # for db2
with connectable.connect() as connection:
context.configure(
connection=connection,
target_metadata=target_metadata,
include_symbol=include_symbol
)
ありがとうございました! – pangpang
私たちはマイグレーションに 'alembic'を使用しているので、各dbに対してalembic autogenerate関数を使いたいのですが、' db.metadata'にはすべてのテーブルオブジェクトが含まれています。 – pangpang
バインドキーを持つテーブルに属するオブジェクトを除外する関数を使用できます。http://alembic.readthedocs.org/en/latest/api/runtime.html#alembic.runtime.environment.EnvironmentContext.configure.params .include_object – davidism