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

标签 sqlalchemy

当我仅对类进行继承时,它才起作用

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/

相关文章:

python - pandas.read_sql_table 生成表未找到错误

python - SQLAlchemy 的管理界面?

python - Python SQLAlchemy中的依赖问题?

python - SQLAlchemy ORM 从子查询中选择多个实体

GCP App Engine 中的 Python 语法错误

python - 从 SQLAlchemy 中删除多对多匹配错误的行数

python - SQLAlchemy 中的错误处理

python - SQLAlchemy order_by 公式结果

python - 在 SQLAlchemy session.add 中传递许多项目

python - 不同类型的 SQLAlchemy 列同义词