我想记录在调用create_all()时SQLAlchemy是否必须创建任何数据库表,但是我没有看到关于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()之前直接在数据库中创建其他逻辑来验证这一点?
答案 0 :(得分:0)
您可以使用after_create
事件。事件处理程序将被传递给名为tables
的关键字arg,它是在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')