sqlalchemy:Base如何知道我已经定义了一个映射到它的类?

Det*_*ant 2 sqlalchemy

它只是在我和我的班级进行继承时才有效

class User(Base):
    __tablename__ = ’users’
    id = Column(Integer, primary_key=True)
    name = Column(String)
    fullname = Column(String)
    password = Column(String)
Run Code Online (Sandbox Code Playgroud)

然后我就可以使用创建表了 Base.metadata.create_all(engine)

我的问题是,sqlalchemy怎么知道我已经定义了User(继承自Base)?

Den*_*ach 5

每个声明性基类都维护着下级类的注册表,这些类在执行类定义时被填充(在__init__()元类方法中).但实际上并没有使用此注册表create_all().该MetaData实例(Base.metadata)是SQLAlchemy的核心(不是ORM)的一部分,负责维护表的注册表.MetaData实例在声明元类__table__的相同__init__()方法中创建表(并存储在类的属性中)时会记住该表.您可以通过Base.metadata.sorted_tables属性获取此表列表.