我开始为我的后端开发使用Flask和PostgreSQL的应用程序,并且正在使用PostgreSQL模式。在create_all函数开始创建表之前创建PostgreSQL模式
我的问题是,当我调用database.create_all()
函数时,SQLalchemy抛出一个错误,因为该模式不存在。
我试图创建创建过程开始之前所要求的模式,使用SQLAlchemy的事件和CreateSchema,但我不明白好如何使用CreateSchema
,用下面的代码:
from flask.ext.sqlalchemy import SQLAlchemy
from sqlalchemy.event import listens_for
from sqlalchemy.schema import CreateSchema
database = SQLAlchemy()
@listens_for(database.metadata, 'before_create')
def create_schemas(target, b, **kw):
CreateSchema('app')
database.session.commit()
监听器被称为,但错误仍然存在。架构不在数据库中创建。
注: 该数据库在另一模块的瓶应用程序实例初始化如下:
from .model import database
database.init_app(app)
with app.app_context():
database.create_all()
所以,我没有得到相关的应用程序上下文的任何问题。
编辑:
CreateSchema
代表CREATE SCHEMA
SQL语句,必须用database.session.execute(CreateSchema('app'))
执行。
现在我意识到,监听器被调用每次创建一个表时,引发错误:
sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) schema "app" already exists
感谢。