向SQLAlchemy表添加列
我用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
命令。