我正在使用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)
答案 0 :(得分:1)
使用db.drop_all()
时,您删除了所有表,因此现在无法插入数据,因为没有表。您需要使用db.create_all()
再次创建表,如@SuperShoot所述。
您应使用诸如alembic
或flask-sqlalchemy
之类的迁移工具。
这样,您可以将新列添加到ORM
中。运行flask db migrate -m 'new column'
,这将检测到更改。然后运行flask db upgrade head
将这些更改应用于您的数据库。