当我仅对类进行继承时,它才起作用
class User(Base):
__tablename__ = ’users’
id = Column(Integer, primary_key=True)
name = Column(String)
fullname = Column(String)
password = Column(String)
然后我可以使用
Base.metadata.create_all(engine)
创建表我的问题是,sqlalchemy如何知道我已经定义了User(从Base继承)?
最佳答案
每个声明性基类都维护降级类的注册表,该注册表在执行类定义时填充(在metaclass的__init__()
方法中)。但是create_all()
实际上并未使用此注册表。 MetaData
实例(Base.metadata
)是SQLAlchemy核心(不是ORM)的一部分,负责维护表的注册表。 MetaData
实例通过声明性元类的相同__table__
方法创建表(并存储在类的__init__()
属性中)时会记住该表。您可以通过Base.metadata.sorted_tables
属性获得此表列表。
关于sqlalchemy - sqlalchemy:Base如何知道我已经定义了映射到它的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8988799/