Koe*_*oen 5 sqlite flask flask-sqlalchemy
我在烧瓶应用程序中有一个表模型:
class Article(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
title = db.Column(db.String(80), nullable=False)
body = db.Column(db.Text, nullable=False)
pubDate = db.Column(db.DateTime, nullable=False, default=datetime.datetime.now())
Run Code Online (Sandbox Code Playgroud)
我使用db.crate_all()and db.add()/db.session向上表添加一些数据,效果很好!
然后我想更新并添加类 Article 的一些属性:
class Article(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
title = db.Column(db.String(80), nullable=False)
body = db.Column(db.Text, nullable=False)
createDate = db.Column(db.DateTime, nullable=False, default=datetime.datetime.now())
touchDate = db.Column(db.DateTime, nullable=False, default=datetime.datetime.now())
publishDate = db.Column(db.DateTime, nullable=False, default=datetime.datetime.now())
isVisible = db.Column(db.Boolean, nullable=False, default=True)
isDraft = db.Column(db.Boolean, nullable=False, default=True)
Run Code Online (Sandbox Code Playgroud)
当我更新类文章后,我db.create_all()再次使用。当我运行我的烧瓶应用程序时,我收到以下错误消息:
cursor.execute(statement, parameters)
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such column: article.createDate
[SQL: SELECT article.id AS article_id, article.title AS article_title, article.body AS article_body, article."createDate" AS "article_createDate", article."touchDate" AS "article_touchDate", article."publishDate" AS "article_publishDate", article."isVisible" AS "article_isVisible", article."isDraft" AS "article_isDraft"
FROM article
WHERE article."isVisible" = 1]
Run Code Online (Sandbox Code Playgroud)
每当我更改db.Model子类时,数据库中的表是否会自动同步?子类的属性db.Model改变后需要做什么操作?
对于工业级解决方案,Flask-Migrate是一个扩展,可使用Alembic处理 Flask 应用程序的 SQLAlchemy 数据库迁移。
\n\n\nAlembic是SQLAlchemy作者编写的数据库迁移工具。迁移工具提供以下功能:
\n\n
\n- 可以向数据库发出 ALTER 语句以更改表的结构和其他构造
\n- 提供一个可以构建\xe2\x80\x9cmigration script\xe2\x80\x9d的系统;每个脚本指示可以将目标数据库\xe2\x80\x9cupgrade\xe2\x80\x9d 升级到新版本的一系列特定步骤,以及可选的一系列可以\xe2\x80\x9cdowngrade\xe2\x80\x9d 的步骤同样,反向执行相同的步骤。
\n- 允许脚本以某种顺序方式执行。
\n
还可以执行原始 SQLALTER TABLE语句。
请参阅如何在 Flask-SQLAlchemy 应用程序中执行原始 SQL
\n| 归档时间: |
|
| 查看次数: |
7599 次 |
| 最近记录: |