Flask-SQLAlchemy - 何时创建和销毁表/数据库?

问题描述 投票:11回答:1

我对标题中提到的主题感到有些困惑。

因此,当启动Flask应用程序时,SQLAlchemy是否会搜索SQLALCHEMY_DATABASE_URI以获取正确的MySQL数据库。然后,如果表已经不存在,它会创建表吗?

如果编入SQLALCHEMY_DATABASE_URI文件中的config.py变量的数据库不存在怎么办?

如果该数据库存在,并且只存在少数几个表(SQLAlchemy代码中编码的表多于实际MySQL数据库中存在的表),该怎么办?它会删除这些表,然后使用当前规范创建新表吗?

如果这些表全部存在怎么办?它们会被删除并重新创建吗?

我试图理解整个过程是如何工作的,以便我(1)在对模式进行更改时不丢失数据库信息,并且(2)可以编写必要的代码来完全管理SQLAlchemy如何以及何时与实际数据库。

python mysql flask sqlalchemy flask-sqlalchemy
1个回答
13
投票

表不是自动创建的;你需要明确调用SQLAlchemy.create_all() method让它为你创建表:

db = SQLAlchemy(app)
db.create_all()

例如,您可以使用命令行实用程序执行此操作。或者,如果您部署到PaaS(例如Google App Engine),则会使用专用的仅限管理员的视图。

这同样适用于数据库表销毁;使用SQLAlchemy.drop_all() method

参见Creating and Dropping tables chapter of the documentation,或者看看database chapter of the Mega Flask Tutorial

您还可以将此任务委派给Flask-Migrate或类似的架构版本控制工具。这些可以帮助您记录和编辑模式创建和迁移步骤;现实项目的数据库模式永远不会是静态的,您希望能够在版本或模式之间移动现有数据。然后,创建初始模式只是第一步。

© www.soinside.com 2019 - 2024. All rights reserved.