[英]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.