如何从 Flask 在 SQLAlchemy 中重新创建数据库?

bai*_*win 2 python sqlalchemy flask

我正在使用 Flask 项目中的 SQLAlchemy ORM 框架。我想在我的一个模型中添加另一列。在我这样做之后,我曾经db.session.drop_all()删除数据库中的所有当前条目,然后我尝试使用新字段重新创建一个新实例。

每当我尝试时,我都会收到此错误

sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no 
such table: user
[SQL: SELECT user.id AS user_id, user.username AS user_username, user.email AS user_email, user.password AS user_password, user.image_file AS user_image_file 
FROM user]
Run Code Online (Sandbox Code Playgroud)

我想我可能需要以某种方式重建数据库,但我不确定如何。我查看了文档,但找不到任何有用的东西。

__init__.py

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
Run Code Online (Sandbox Code Playgroud)

模型.py

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True, nullable=False)
    email = db.Column(db.String(40), unique=True, nullable=False) #newly added field
    password = db.Column(db.String(60), nullable=False)
    image_file = db.Column(db.String(20), nullable=False, default='default.jpg')
    messages = db.relationship('Message', backref='user', lazy=True)
Run Code Online (Sandbox Code Playgroud)

kem*_*mis 7

当您使用时,db.drop_all()您删除了所有表,因此现在您无法插入数据,因为没有表。您需要db.create_all()像@SuperShoot 提到的那样再次创建表。

您应该使用诸如alembic或 之类的东西进行迁移flask-sqlalchemy。这样您就可以将新列添加到您的ORM. 运行flask db migrate -m 'new column',这将检测更改。然后运行flask db upgrade head以将这些更改应用到您的数据库。