【问题标题】:Flask-SQLAlchemy - When are the tables/databases created and destroyed?Flask-SQLAlchemy - 何时创建和销毁表/数据库?
【发布时间】:2019-04-26 19:03:52
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: python mysql flask sqlalchemy flask-sqlalchemy


    【解决方案1】:

    表格不会自动创建;你需要调用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 或类似的架构版本控制工具。这些帮助您记录和编辑模式创建和迁移步骤;实际项目的数据库模式永远不会是静态的,您希望能够在版本或模式之间移动现有数据。创建初始模式只是第一步。

    【讨论】:

    • 大家好,我想创建一个预定义的用户,即管理员。运行烧瓶后,我创建用户并登录。但是当服务器重新启动时,用户不存在。我想保存该管理员用户,或者当烧瓶应用程序运行时首先创建管理员用户。请帮我解决这个问题。
    • @SalmanMushtaq:在 cmets 对不起,我无能为力。我所能做的就是建议您验证您的 SQLAlchemy URL 没有引用临时数据库(如内存中的 SQLite 数据库)并且您提交了事务。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-14
    • 2015-06-06
    • 2018-05-08
    • 2014-12-15
    • 2016-05-20
    • 1970-01-01
    相关资源
    最近更新 更多