python - 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()
解决方案
确实 Snakecharmerb 是正确的
调用 Base.metadata.create_all(engine) 创建用 Base 作为超类声明的表。另请参阅 alembic 将增量更改应用于数据库。
推荐阅读
- sql-server - 如何在运行时在 Spring Boot jpa 中打开连接?
- reactjs - 从下拉列表中选择选项时,如何获取已更改的对象以及新更改的值
- django - 传递给模板标签时如何使用上下文变量
- ruby-on-rails - 如何通过删除空格来压缩 html.erb 文件?
- java - 无法使用 AsyncTask 生成 url 图像
- plc - 是否可以在结构化文本中间接索引数组(IEC 61131-3 标准)
- java - Android 上的简单 MVVM 架构和 Java 上的 AndroidX
- postgresql - 无法从 pg_basebackup 恢复 postgres v11
- webforms - 如何在 Decibel Insight 中实施表单分析跟踪?
- javascript - 如何将 2 个文档(PDF 和 XFDF)从 C# .NET Core WebAPI 控制器返回到 SPA?