首页 > 解决方案 > SQLAlchemy 中的 ORM 模型会自动创建表吗?

问题描述

我是新手,sqlalchemy但现在已经成功地开始使用它了。我怎么觉得我可能不必要地将我的 ORM 列的声明加倍...是自动创建的 ORM 对象所需的表。?

from sqlalchemy import Column, Integer, String, DateTime, Boolean
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

TABLE_NAME = "my_hats"


def create_my_hat_table(pg_control):
    pg_control.create_table(TABLE_NAME,
                            Column('creation_datetime', DateTime, primary_key=True, nullable=False),
                            Column('id', Integer, primary_key=True, nullable=False),
                            Column('hat_color', String))


class Hat(Base):
    __tablename__ = TABLE_NAME

    creation_datetime = Column(DateTime, primary_key=True, nullable=False)
    id = Column(Integer, primary_key=True, nullable=False)
    hat_color = Column('hat_color', String)

我的代码中的其他地方是一个包装类,其中包含我用来执行的会话对象 likeso

    def create_table(self, table_name, *args):
        new_table = Table(table_name, self.__meta, *args)

        with self.__db_engine.connect() as conn:
            new_table.create()

标签: pythonsqlalchemy

解决方案


确实 Snakecharmerb 是正确的

调用 Base.metadata.create_all(engine) 创建用 Base 作为超类声明的表。另请参阅 alembic 将增量更改应用于数据库。


推荐阅读