尝试删除 Sqlite DB 中表的列失败,并显示:
文件“/home/.../venv/lib/python3.11/site-packages/peewee.py”,第3252行,在execute_sql中 光标.execute(sql, params 或 ()) peewee.OperationalError:靠近“DROP”:语法错误
小便==3.17.0 fastapi==0.109.0
# db.py
from peewee import *
from playhouse.migrate import *
db = SqliteDatabase('people.db')
class Person(Model):
name = CharField()
date_of_birth = DateField()
age = SmallIntegerField()
class Meta:
database = db
class Pet(Model):
owner = ForeignKeyField(Person, backref='pets')
name = CharField()
animal_type = CharField()
class Meta:
database = db
db.connect()
db.create_tables([Person, Pet])
migrator = SqliteMigrator(db)
migrate(
migrator.drop_column(
Person._meta.table_name,
"date_of_birth"
),
)
db.close()
我使用 FastAPI 并使用以下命令进行迁移(只需运行 fastapi 服务器)
uvicorn main:app --reload
migrator 的 rename_column, add_column, ... 方法有效 我还不知道使用 Peewee 迁移的正确方法(文件夹、文件结构,例如 djangoORM)
.drop_column(..., legacy=True)
应该会继续工作,直到您引入此补丁 -
legacy=True
所做的是解决 Sqlite 的 ALTER TABLE 支持中的限制: