Я начинаю разрабатывать приложение с Flask и PostgreSQL для моего внутреннего интерфейса, и я использую схемы PostgreSQL.Создать схему PostgreSQL до того, как функция create_all начнет создавать таблицы
Моя проблема в том, что, когда я вызываю функцию 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()
Таким образом, я не получаю любые проблемы, связанные с контекстом приложения.
EDIT:
CreateSchema
представляют CREATE SCHEMA
SQL заявление с, который должен быть выполнен с database.session.execute(CreateSchema('app'))
.
Теперь я понимаю, что слушатель называется каждый раз, когда создается одна таблица, выбрасывая ошибку:
sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) schema "app" already exists
Спасибо.