Как мне узнать, нужно ли SQLAlchemy создавать таблицы при вызове create_all ()? - PullRequest
0 голосов
/ 09 января 2019

Я бы хотел узнать, нужно ли SQLAlchemy создавать какие-либо таблицы базы данных при вызове create_all (), однако я не вижу никакой документации по возвращаемому значению create_all (). Как мне это сделать?

Я попытался настроить простую базу данных в памяти, используя следующий код и вызвал create_all (). Если для echo задано значение true, я вижу, что таблица создана должным образом, но myreturn имеет тип NoneType. Если я вызову create_all () второй раз, таблица не будет создана, а myreturn все еще будет NoneType.

from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, relationship
Base = declarative_base()

class User(Base):
    __tablename__ = 'testtable'
    id = Column('id', Integer, primary_key=True)
    name = Column('name', String, unique=True)

engine = create_engine('sqlite:///:memory:', echo=True)
myreturn = Base.metadata.create_all(bind=engine)

Есть ли способ определить, созданы ли таблицы с помощью create_all (), или мне нужно создать дополнительную логику для проверки этого в базе данных непосредственно перед вызовом create_all ()?

1 Ответ

0 голосов
/ 10 января 2019

Вы можете использовать событие after_create. В обработчик события будет передано ключевое слово arg с именем tables, которое представляет собой набор таблиц, созданных в рамках вызова метода create_all().

from sqlalchemy import event

@event.listens_for(Base.metadata, 'after_create')
def receive_after_create(target, connection, tables, **kw):
    "listen for the 'after_create' event"
    if tables:
        print('A table was created')
    else:
        print('A table was not created')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...