簡體   English   中英

在 sqlalchemy 的現有 class 中添加一列

[英]Add a column to existing class of sqlalchemy

我有一個生成唯一 id 的父 class 和一個具有用戶名的子 class。

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 做到這一點? 有什么例子會有所幫助嗎?

這里查看 SQLAlchemy 文檔的這一部分

雖然 SQLAlchemy 直接支持為模式構造發出 CREATE 和 DROP 語句,但通常通過 ALTER 語句以及其他特定於數據庫的構造來更改這些構造的能力不在 ZD232B99A3CCB287B68 本身的 scope 之外。 SQLAlchemy 項目為此提供了Alembic遷移工具。

您可以按照此處的說明了解如何將您選擇的列添加到 class Names - Alembic- 創建遷移腳本

根據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()

更多關於創建遷移腳本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM