Python SQLAlchemy 怎么对表的字段进行:添加、修改、删除?

SQLAlchemy 怎么对表的字段进行:添加、修改、删除?除了直接写原生 SQL 以外,现在创建表很容易单我没找到修改表的 alter 方法?有谁用过么?

阅读 1.8k
avatarAI BotBETA

在 SQLAlchemy 中,对表的字段进行添加、修改、删除主要通过 ALTER TABLE SQL 语句来实现,但 SQLAlchemy 本身并不直接支持 ALTER TABLE。因此,如果你想要修改一个已经存在的表的字段,需要重新创建这个表。在创建新表时,可以使用 Column 对象的 alter_existing 属性来修改已存在的字段。

下面是一些基本的代码示例:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String

engine = create_engine('sqlite:///example.db')
metadata = MetaData()

# 创建表
def create_table():
    table = Table('my_table', metadata,
        Column('id', Integer, primary_key=True),
        Column('name', String),
        Column('age', Integer),
    )
    table.create(engine)

# 修改表
def alter_table():
    metadata.reflect(engine)
    table = Table('my_table', metadata, autoload_with=engine)
    new_table = Table('new_table', metadata,
        table.columns.copy(),
        copy_from=table,
    )
    new_table.create(engine)
    metadata.remove(table)
    metadata.add_table(new_table)

在上面的代码中,create_table 函数用于创建新的表,alter_table 函数用于修改已存在的表。需要注意的是,在 alter_table 函数中,我们首先通过 metadata.reflect 方法获取了已存在的表的元数据,然后创建了一个新的表,并将新表的列设置为已存在表的列的复制。然后,我们使用 metadata.remove 方法删除了旧的表,使用 metadata.add_table 方法添加了新的表。

1 个回答

理论上这不属于SQLAlchemy的职责范围,可找一下migrations相关主题。另外可参见:https://docs.djangoproject.com/en/4.2/topics/migrations/


开发阶段,可以直接清除所有表重新创建。
已经上线的,通常不会这么做,而是要做上线SQL审核执行等流程,还要做兼容之类。

只将SQLAlchemy作为一个ORM就好。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题