我对标题中提到的主题感到有些困惑。
因此,当启动Flask应用程序时,SQLAlchemy是否会在SQLALCHEMY_DATABASE_URI
中搜索正确的MySQL数据库。然后,如果它们不存在,它会创建表吗?
如果编入SQLALCHEMY_DATABASE_URI
文件中config.py
变量的数据库不存在会怎样?
如果该数据库存在,并且只存在少数几个表(如果SQLAlchemy代码中编码的表多于实际MySQL数据库中存在的表),该怎么办?它会删除这些表,然后使用当前规范创建新表吗?
如果那些表全部存在怎么办?它们会被删除并重新创建吗?
我试图理解整个过程是如何工作的,以便我(1)在对模式进行更改时不丢失数据库信息,并且(2)可以编写必要的代码来完全管理SQLAlchemy的方式和时间与实际的数据库进行对话。
答案 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或类似的架构版本控制工具。这些可以帮助您记录和编辑模式创建和迁移步骤;现实项目的数据库模式永远不会是静态的,您希望能够在版本或模式之间移动现有数据。然后,创建初始模式只是第一步。