1.现在我的postgresql中有多个schema现在使用sqlalchemy中URIpostgresql://postgres:111111@127.0.0.1:5432/db连接上的数据库中默认是在public这个schema下的,我怎么使用stage这个schema呢?
ringa_lee
Apabila menanyakan jadual, bawa awalan skema, seperti
select xxx from stage.table_name where ...;
2 situasi:
1: Tentukan model secara manual
class Test(db.Model): __tablename__ = 'test' __table_args__ = { 'schema': 'other_schema' } id = db.Column('test_id', db.String(12), primary_key=True, ) name = db.Column('test_name', db.String(10))
Apabila mentakrifkan model secara manual, tambahkan parameter __table_args__ untuk menentukan skema yang digunakan oleh model
2: Mencerminkan jadual dalam skema ke dalam Model
Saya menggunakan fungsi kilang untuk menjana kejadian Flask.
Dalam fungsi kilang:
def create_app(config_name): app = Flask(__name__) app.config.from_object(config[config_name]) CORS(app) config[config_name].init_app(app) db.init_app(app) # 总觉得这里的实现不是很好 有更好的解决方案请告知 tables = [‘test’] op = getattr(db.Model.metadata, ‘reflect’) op(bind=db.get_engine(app), only=tables, schema=’other_schema’) login_manager.init_app(app) from .hello import hello from .auth import auth app.register_blueprint(hello) app.register_blueprint(auth) return app
Takrifan model pantulan:
class Test(db.Model): __tablename__ = ‘other_schema.test’ # 有时后数据表设计时没有主键,但SQLAlchemy需要有主键,对于这类表我们需要重新指定主键: # 这里有时候需要用 __mapper_args__ 指定这张表的primary_key是哪个 __mapper_args__ = { ‘primary_key’: [db.Model.metadata.tables[‘other_schema.test’].c.id] }
Kemudian anda boleh menggunakan ORM untuk mengendalikan jadual skema lain. Saya telah bergelut dengan masalah ini hampir sepanjang hari. Saya berharap ia dapat membantu orang yang memerlukan.
Apabila menanyakan jadual, bawa awalan skema, seperti
2 situasi:
1: Tentukan model secara manual
Apabila mentakrifkan model secara manual, tambahkan parameter __table_args__ untuk menentukan skema yang digunakan oleh model
2: Mencerminkan jadual dalam skema ke dalam Model
Saya menggunakan fungsi kilang untuk menjana kejadian Flask.
Dalam fungsi kilang:
Takrifan model pantulan:
Kemudian anda boleh menggunakan ORM untuk mengendalikan jadual skema lain. Saya telah bergelut dengan masalah ini hampir sepanjang hari. Saya berharap ia dapat membantu orang yang memerlukan.