gpt4 book ai didi

python - 我如何知道调用 create_all() 时 SQLAlchemy 是否必须创建表?

转载 作者:太空宇宙 更新时间:2023-11-03 21:22:43 32 4
gpt4 key购买 nike

我想记录在调用 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() 之前创建额外的逻辑来直接在数据库中验证这一点?

最佳答案

您可以使用after_create事件。事件处理程序将传递一个名为 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')

关于python - 我如何知道调用 create_all() 时 SQLAlchemy 是否必须创建表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54115587/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com