向SQLAlchemy表添加列

60 投票
12 回答
132452 浏览
提问于 2025-04-17 01:25

我用SQLAlchemy创建了一个表,但忘记添加一列。其实我想做的就是这个:

users.addColumn('user_id', ForeignKey('users.user_id'))

请问这个语法怎么写?我在文档里找不到。

12 个回答

27

请查看SQLAlchemy文档的这一部分:http://docs.sqlalchemy.org/en/latest/core/metadata.html#altering-schemas-through-migrations

Alembic 是最新的软件,提供了这种功能,而且它的作者和SQLAlchemy是同一个人。

64

我也遇到了同样的问题,光是想用迁移库来处理这么简单的事情就让我感到不安。无论如何,这是我目前的尝试:

def add_column(engine, table_name, column):
    column_name = column.compile(dialect=engine.dialect)
    column_type = column.type.compile(engine.dialect)
    engine.execute('ALTER TABLE %s ADD COLUMN %s %s' % (table_name, column_name, column_type))

column = Column('new_column_name', String(100), primary_key=True)
add_column(engine, table_name, column)

不过,我还是不知道怎么在原始的SQL请求中插入 primary_key=True

29

这被称为数据库迁移(SQLAlchemy 默认不支持迁移功能)。你可以考虑使用 sqlalchemy-migrate 来帮助处理这类问题,或者你也可以直接通过你选择的数据库的命令行工具使用 ALTER TABLE 命令。

撰写回答