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

时间:2019-05-15 04:13:32

标签: python flask sqlalchemy

我正在使用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]

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

__ init __。py

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

models.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)

1 个答案:

答案 0 :(得分:1)

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

您应使用诸如alembicflask-sqlalchemy之类的迁移工具。 这样,您可以将新列添加到ORM中。运行flask db migrate -m 'new column',这将检测到更改。然后运行flask db upgrade head将这些更改应用于您的数据库。