【发布时间】:2015-09-07 19:55:49
【问题描述】:
我开始使用 Flask 和 PostgreSQL 为我的后端开发应用程序,并且我正在使用 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()
监听器被调用,但错误仍然存在。未在数据库中创建架构。
注意: 数据库在另一个模块中使用 Flask 应用程序实例进行初始化,如下所示:
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
谢谢。
【问题讨论】:
标签: postgresql flask sqlalchemy flask-sqlalchemy