0
的SQLAlchemy的變革提供了Connection.execution_options.schema_translate_map
執行時間的模式,如docs說。燒瓶SQLAlchemy中如何使用create_all與schema_translate_map
在示例中顯示瞭如何使用執行查詢,但想知道如何將它與create_all()一起使用。
我使用Flask-Sqlaclhemy和postgresql作爲數據庫。比方說,我有這樣的:
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
def create_app():
app = Flask(...)
...
db.init_app(app)
...
return app
class User(db.Model):
__tablename__ = 'user'
__talbe_args__ = {'schema':'public'}
company = db.Column(db.String(10))
class SomePublicModel(db.Model):
__tablename__ = 'some_public'
__talbe_args__ = {'schema':'public'}
...
class SomeModelByDynamicSchema(db.Model):
__tablename__ = 'some_dynamic'
__talbe_args__ = {'schema':'dynamic'}
...
的dynamic
模式將被取代,根據用戶所在的公司在執行時間上的其他價值。
假設我已經在數據庫中的模式public
和dynamic
和我想創建一個表的新模式,是這樣的:
def create_new():
user = User(company='foo')
db.session.execute("CREATE SCHEMA IF NOT EXISTS %s" % user.company)
db.session.connection().execution_options(schema_translate_map={'dynamic':user.company})
#I would like to do something of the kind
db.create_all()
我預計在foo
架構中創建的表如foo.some_dynamic
,但SQLAlchemy仍嘗試在dynamic
架構中創建。
有人可以幫助我嗎?