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

时间:2014-01-20 20:14:50

标签: python mysql flask sqlalchemy flask-sqlalchemy

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

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

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

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

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

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

1 个答案:

答案 0 :(得分: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或类似的架构版本控制工具。这些可以帮助您记录和编辑模式创建和迁移步骤;现实项目的数据库模式永远不会是静态的,您希望能够在版本或模式之间移动现有数据。然后,创建初始模式只是第一步。