flask-sqlalchemy怎么操作postgresql中不同schema(默认是public)
威尼斯人线上娱乐官网
威尼斯人线上娱乐官网
当前位置 : 威尼斯人线上娱乐官网 > www.vn99.net

flask-sqlalchemy怎么操作postgresql中不同schema(默认是public)

1.现在我的postgresql中有多个schema

现在使用sqlalchemy中URI
postgresql://postgres:111111@127.0.0.1:5432/db
连接上的数据库中默认是在public这个schema下的,
我怎么使用stage这个schema呢?

查询表的时候,带上 schema 前缀,例如

 select xxx from stage.table_name where ...; 

2种情况:

1: 手工定义模型

class Testdb.Model:
    __tablename__ = test
    __table_args__ = {
        schema: other_schema
    }
    id = db.Columntest_id, db.String12, primary_key=True, 
    name = db.Columntest_name, db.String10

手工定义模型时,加上__table_args__参数 指定model使用的schema

2: 反射schema中的一个表到Model中

我用的是工厂函数生成Flask实例的。

工厂函数中:

def create_appconfig_name:
    app = Flask__name__
    app.config.from_objectconfig[config_name]
    CORSapp
    config[config_name].init_appapp
    db.init_appapp
    # 总觉得这里的实现不是很好 有更好的解决方案请告知
    tables = [‘test’]
    op = getattrdb.Model.metadata, ‘reflect’
    opbind=db.get_engineapp, only=tables, schema=’other_schema’

    login_manager.init_appapp
    from .hello import hello
    from .auth import auth
    app.register_blueprinthello
    app.register_blueprintauth

    return app

反射模型定义中:

class Testdb.Model:
    __tablename__ = ‘other_schema.test’
    
    # 有时后数据表设计时没有主键,但SQLAlchemy需要有主键,对于这类表我们需要重新指定主键:
    # 这里有时候需要用 __mapper_args__ 指定这张表的primary_key是哪个
    __mapper_args__ = {
    ‘primary_key’: [db.Model.metadata.tables[‘other_schema.test’].c.id]
    }

然后就可以通过orm的方式去操作其他schema的表了,被这个问题折腾了大半天了,希望能帮到有需要的人。

该答案已被忽略,原因:

栏目列表

广告位

威尼斯人线上娱乐官网