如何使用Python更改sqlite3中字符串列的长度

时间:2014-08-07 08:51:03

标签: python sqlite sqlalchemy sqlalchemy-migrate

我正在使用sqlite创建的sqlalchemy数据库。

db / table看起来像这样:

from sqlalchemy import create_engine
engine = create_engine('sqlite:///TestResults.db', echo=True)

# create a session to bind to the actual database
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, DateTime, Enum
from sqlalchemy.orm import relationship, backref
from sqlalchemy import ForeignKey

Base = declarative_base()
class TestCases(Base):
    __tablename__ = 'Testcases'

    id = Column(Integer, primary_key=True, autoincrement=True)
    tc_name = Column(String(50))
    tc_doc = Column(String(400))
    tc_result = Column(Enum('Pass', 'Fail', 'Skip', name='testcase_result'))
    tc_msg = Column(String(1000))

我想将tc_msg列的长度从1000改为,比方说,2000。我怎么能这样做,使用sqlalchemy或Python sqlite3库?

我在SO上读到,无法修改sqlite中的表,这是sqlite(SQLite Modify Column)的一个缺点。在那种情况下如何实现这一目标?任何指针都以?<​​/ p>开头

我不是sql的专家。我最初使用sqlalchemy在Python中设计了我的表(Testcases),现在我意识到tc_msg长度太小而想要修改它。我现在能想到的唯一解决方案是创建一个新的数据库。但是数据库已经部署,我不能通过创建一个新的结果来丢失所有结果。

修改

我尝试使用sqlalchemy-migrate中所解释的from sqlalchemy import * from migrate import * def upgrade(migrate_engine): # Upgrade operations go here. Don't create your own engine; bind # migrate_engine to your metadata meta = MetaData(bind=migrate_engine) tc = Table('Testcases', meta, autoload=True) tcc = Column('tc_msg', String(2000)) tcc.create(tc)

我的脚本更新表格列:

sqlalchemy.exc.OperationalError: (OperationalError) duplicate column name: tc_msg '\nALTER TABLE "Testcases" ADD tc_msg VARCHAR(2000)' () 

但它抱怨以下错误:

{{1}}

0 个答案:

没有答案