0

我有一个生成唯一 id 的父类和一个具有用户名的子类。

class Ids(object): 
    id = Column(Integer, Sequence('res_id_seq'), primary_key=True) 


class Names(Ids, base): 
    username = Column(String(50))

# I have created an sqlite db and persisting using sqlalchemy

engine = create_engine('sqlite:///emp.db', echo=True)
base.metadata.create_all(engine)

我想在名称(姓氏)中添加一列。我怎么能用 sqlalchemy-migrate 做到这一点?有什么例子会有所帮助吗?

4

2 回答 2

0

从这里查看 SQLAlchemy 文档的这一部分

虽然 SQLAlchemy 直接支持为模式构造发出 CREATE 和 DROP 语句,但通常通过 ALTER 语句以及其他特定于数据库的构造来更改这些构造的能力超出了 SQLAlchemy 本身的范围。 SQLAlchemy 项目为此提供了Alembic迁移工具。

您可以按照此处关于如何将您选择的列添加到类中的说明进行操作Names- Alembic-Create a Migration Script

于 2020-07-07T15:31:32.720 回答
0

根据sqlalchemy-migrate 文档,可以在迁移中的列上使用createdrop方法。您的迁移脚本可能会像这样循环:

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

metadata = MetaData()

# Note that here you use Table instance
# not the class derived from sqlalchemy.ext.declarative.declarative_base
names = Table(
    'names',
    metadata,
    # You need to specify only primary key column
    # if you just adding a new column in this script
    Column('id', Integer, primary_key=True),
)

lastname = Column('lastname', String(50))


def upgrade(migrate_engine):
    metadata.bind = migrate_engine
    lastname.create(names)


def downgrade(migrate_engine):
    metadata.bind = migrate_engine
    names.append_column(lastname)
    names.c.lastname.drop()

更多关于创建迁移脚本。

于 2020-07-08T06:17:04.127 回答