Python Flask sqlalchemy在表heroku postgresq中插入新列

2024-06-08 07:24:45 发布

您现在位置:Python中文网/ 问答频道 /正文

背景信息:

我有一个由heroku托管在postgresql数据库上的应用程序。在

我已经在这个数据库中有一些数据,现在我必须在我的一个表中添加一个新行。在

通常我删除旧数据库并重新创建它。但是在将来,如果项目是实时的,我将不得不在不丢失数据的情况下更新表。在

我可以创建一个转储,删除旧数据库,然后像往常一样重新创建它。然后我可以使用一个脚本将所有现有数据上传到新的数据库中。但这感觉不对。在

我需要的:

在我目前的情况下,数据库中有博客数据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

^{pr2}$

它给了我一个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交易已被取消。在


Tags: 数据text数据库falsetruetablelink情况
1条回答
网友
1楼 · 发布于 2024-06-08 07:24:45

好的,我用alembic来解决这个问题,它非常简单,花了我10分钟

例如,通过pip安装:

pip install alembic

然后按照教程操作。在

基本上,你用你的应用进入你的文件夹并初始化alembic一次,这样它就创建了所有必要的alembic文件。在

alembic.ini中,您可以更改数据库的路径(可以在本地进行更改,无需将某些内容推送到heroku)。在

然后使用alembic revision创建一个将更改应用于数据库的脚本。您必须用编辑器打开这个创建的脚本,才能添加更改。(更多信息请参阅教程)。在

最后你运行alembic upgrade head,就这样!在

在我的例子中,这是脚本中必要的更改:

^{pr2}$

相关问题 更多 >

    热门问题