Sqlalchemy SQL炼金术和生成ALTER TABLE语句

Sqlalchemy SQL炼金术和生成ALTER TABLE语句,sqlalchemy,Sqlalchemy,我想在SQL Alchemy中以编程方式生成ALTER TABLE语句,以便向表中添加一个新列。要添加的列应采用现有映射类的定义 因此,给定一个SQL Alchemy列实例,我可以生成ALTER TABLE所需的SQL模式定义吗。。。添加列…和创建索引… 我在Python提示符下玩过游戏,能够看到我要查找的数据的可读描述: >>> DBChain.__table__.c.rName Column('rName', String(length=40, convert_unicod

我想在SQL Alchemy中以编程方式生成
ALTER TABLE
语句,以便向表中添加一个新列。要添加的列应采用现有映射类的定义

因此,给定一个SQL Alchemy
实例,我可以生成
ALTER TABLE所需的SQL模式定义吗。。。添加列…
和创建索引…

我在Python提示符下玩过游戏,能够看到我要查找的数据的可读描述:

>>> DBChain.__table__.c.rName
Column('rName', String(length=40, convert_unicode=False, assert_unicode=None, unicode_error=None, _warn_on_bytestring=False), table=<Chain>)

我听说过,但这似乎是围绕静态更改构建的,我希望动态生成模式更改


(我不想为这种设计辩护,我只是想寻找一种可以移植的方式来向现有表中添加列。)

在跟踪
引擎之后。使用create_all()
我发现了一个可能的答案:

>>> engine.dialect.ddl_compiler(
...    engine.dialect,
...    DBChain.__table__.c.rName ) \
... .get_column_specification(
...    DBChain.__table__.c.rName )
'"rName" VARCHAR(40)'
可以使用以下方法创建索引:

sColumnElement = DBChain.__table__.c.rName
if sColumnElement.index:                                   
    sIndex = sa.schema.Index(                              
            "ix_%s_%s" % (rTableName, sColumnElement.name),
            sColumnElement,                                
            unique=sColumnElement.unique)                  
    sIndex.create(engine)                                

您应该正确迁移数据库内容:

flask db stamp head
flask db migrate
flask db upgrade

什么是flask?哎呀,我还以为你在考虑flask框架呢
flask db stamp head
flask db migrate
flask db upgrade