我正在使用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}}