Meine Kolben-Anwendung hat eine einzige Datenbank (db1) vor, jetzt binde ich eine neue Datenbank (db2), beide hat 10 Tabellen.Alambic Autogenerate Holen Sie sich die Metadaten für eine Flask-SQLAlchemy Bindung
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)
Ich möchte alembic autogenerate-Funktion verwenden, um automatische Erfassen und Erzeugen von Migrationen für db 1 und db2 getrennt, aber db.metadata
werden alle Tabellen-Metadaten erhalten, aber wie nur Metadaten binden db bekommen?
Dank @davidism Hilfe! Ich kann include_symbol verwenden, um es zu erstellen.
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
)
Danke für Hilfe! – pangpang
, weil wir 'alembic' zur Migration verwenden, und wir die alembic autogenerate-Funktion für jede db verwenden möchten, aber die' db.metadata' enthält alle Tabellenobjekte. – pangpang
Sie können eine Funktion verwenden, die Objekte ausschließt, die zu einer Tabelle mit einem Bind-Schlüssel gehören: http://alembic.readthedocs.org/en/latest/api/runtime.html#alembic.runtime.environment.EnvironmentContext.configure.params .include_object – davidism