我開始爲我的後端開發使用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
感謝。