Rumah > Soal Jawab > teks badan
1.现在我的postgresql中有多个schema
现在使用sqlalchemy中URI
postgresql://postgres:111111@127.0.0.1:5432/db
连接上的数据库中默认是在public这个schema下的,
我怎么使用stage这个schema呢?
巴扎黑2017-04-17 17:41:22
Apabila menanyakan jadual, bawa awalan skema, seperti
select xxx from stage.table_name where ...;
ringa_lee2017-04-17 17:41:22
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.