簡體   English   中英

將新列添加到存在表 - Flask Sqlalchemy

[英]Add new column to exists table - Flask Sqlalchemy

我正在嘗試將新列添加到包含數據的現有表中。 問題是我不知道該怎么做,我不想刪除整個表,因為我已經有數據了。

我應該怎么辦? 我如何添加另一列而不影響我的存在表

** 這是我的桌子**

class Movies(db.Model):
__tablename__ = 'movies'
id = db.Column(db.String(300), primary_key=True, unique=True)
cat_id = db.Column(db.String(300), db.ForeignKey('category.id', ondelete='CASCADE'), nullable=False)
category = db.relationship('Category', backref='movies')
title = db.Column(db.String(250), nullable=False)
link = db.Column(db.String(250), nullable=False)
duration = db.Column(db.String(250), nullable=False)
thumb_large = db.Column(db.String(250), nullable=False)
thumb = db.Column(db.String(250), nullable=False)
embed = db.Column(db.String(250), nullable=False)
tags = db.Column(db.String(250), nullable=False)
published = db.Column(db.String(250), nullable=False)

現在我想添加新列video_id = db.Column(db.String(250)) 當我嘗試添加它時出現的錯誤是[SQL: ALTER TABLE movies ADD COLUMN video_id VARCHAR(250) NOT NULL]

我應該怎么辦?

如果您在非空表中插入列,則 video_id應為nullable=True 如果不可接受,則需要用一些數據填充 video_id。 例如:

video_id = db.Column(db.String(250), nullable=False, default='Some value here')

有一個庫可以幫助管理數據庫遷移。 https://flask-migrate.readthedocs.io/en/latest/

但是,如果您想避免額外的依賴並且不怕破壞某些東西,您可以運行錯誤引用的原始 SQL 命令。

ALTER TABLE movies ADD COLUMN video_id VARCHAR(250) NOT NULL

最終我所做的是我去了 pgAdmin 並向表中添加了新列,這不是最正確的方法,但它有效。

你可以參考alembic來解決這個問題:)

但是,這是我解決的方法:D

首先,確保安裝

pip3 install alembic

其次,運行 alembic revision 來創建腳本。 就我而言,我跑

python3 app.py db revision -m 'some message'

三、運行alembic升級頭。 對我來說,我跑

python3 app.py db upgrade head

最后,我在腳本中進行了更改(不將其添加到腳本中不適用於我的情況)

def upgrade():
    op.add_column('movies', sa.Column('video_id', sa.String())

def downgrade():
    op.drop_column('movies', 'video_id')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM