【发布时间】:2016-12-01 10:35:57
【问题描述】:
背景信息:
我有一个由 heroku 在 postgresql 数据库上托管的应用程序。
我已经在这个数据库中有一些数据,现在我必须在我的一个表中添加一个新行。
通常我删除旧数据库并重新创建它。但将来如果项目上线,我将不得不在不丢失数据的情况下更新表格。
我可以创建一个 DUMP 并删除旧数据库并像往常一样重新创建它。然后我可以使用脚本并将所有现有数据上传到新数据库中。但这感觉不对。
我需要什么:
在我目前的情况下,数据库中有博客数据table=blog,我需要在我的table=zimmer 中插入一个新列,所以blog 甚至不会受到影响。
class Zimmer(Base):
__tablename__ = 'zimmer'
id = Column(Integer, primary_key=True)
infofeld = Column(Text, nullable=False)
land = Column(Text, nullable=False)
bundesland = Column(Text, nullable=False)
stadt = Column(Text, nullable=False)
plz = Column(Text, nullable=False)
strasse = Column(Text, nullable=False)
hausnr = Column(Text, nullable=True)
eigener_link = Column(Text, nullable=True)
zimmer_lat = Column(Float, nullable=False)
zimmer_lng = Column(Float, nullable=False)
reingestellt_am = Column(Date, nullable=False)
这是新值:eigener_link = Column(Text, nullable=True)
我目前正在 localhost 上进行试验,但到目前为止我只得到ProgrammingError,因为每次我尝试加载一个显示zimmer 的站点时,它都会显示没有eigener_link 列(这是合乎逻辑的)。
我尝试了什么:
我尝试在它发生的行中try except ProgrammingError,这给了我一个InternalError。这里我尝试更新zimmer表并添加新列eigener_link:
try:
for page in paginator:
pages_list.append(page.number)
except ProgrammingError:
update(Zimmer).values(eigener_link='Ihr Link')
db_session.commit()
它给了我一个InternalError。我通过pgAdmin检查了数据库,新值没有添加。
try:
for page in paginator:
pages_list.append(page.number)
except ProgrammingError:
db_session.execute('ALTER TABLE zimmer ADD eigener_link TEXT')
db_session.commit()
这也给了我InternalError 交易已被取消。
【问题讨论】:
标签: python sql database postgresql heroku