热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Flask框架下MySQL数据库的集成与应用

本文详细探讨了如何在Flask框架中集成和使用MySQL数据库,通过具体的实例和代码演示,帮助开发者更好地理解和掌握Flask与MySQL的结合使用。

本文旨在为读者提供在Flask框架中集成MySQL数据库的方法和技巧,特别是在实际项目中应用这些技术的指导。虽然许多教程倾向于使用SQLite作为示例数据库,以简化教学过程,但在生产环境中,MySQL因其强大的功能和稳定性而更为常用。因此,了解如何在Flask中配置和使用MySQL是非常有价值的。


环境说明:

操作系统:Ubuntu 16.04 4.8.0-36-generic(运行于VMware虚拟机上)


  1. 首先需要明确的是,在Flask-SQLAlchemy中使用MySQL时,不会像SQLite那样自动创建数据库。因此,您需要先手动创建MySQL数据库,之后才能利用Flask-SQLAlchemy进行数据操作。具体步骤如下:
    • 通过命令行登录MySQL:使用命令 mysql -u root -p 登录,并输入安装MySQL时设置的密码。
    • 创建数据库:编写SQL脚本文件(如 data_test.sql),并在MySQL中执行此脚本来创建数据库。例如,可以在脚本所在目录下执行 source data_test.sql 命令。如果不在脚本目录下,则需要提供完整的文件路径。

    下面是一个简单的 data_test.sql 脚本示例,用于创建两个基本的表结构——rolesusers

    DROP DATABASE IF EXISTS data_test;
    CREATE DATABASE data_test;
    USE data_test;

    CREATE TABLE roles (
    id INT(11) NOT NULL AUTO_INCREMENT,
    name VARCHAR(255) COLLATE utf8_bin NOT NULL,
    UNIQUE (name),
    permissions INT(11),
    `default` BOOLEAN DEFAULT FALSE,
    INDEX(`default`),
    PRIMARY KEY (id)
    ) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
    AUTO_INCREMENT=1;

    CREATE TABLE users (
    id INT(11) NOT NULL AUTO_INCREMENT,
    username VARCHAR(255) COLLATE utf8_bin NOT NULL,
    UNIQUE (username),
    email VARCHAR(255) COLLATE utf8_bin NOT NULL,
    UNIQUE (email),
    INDEX(username,email),
    password_hash VARCHAR(255) COLLATE utf8_bin NOT NULL,
    role_id INT(11),
    confirmed BOOLEAN DEFAULT FALSE,
    name VARCHAR(255),
    location VARCHAR(255),
    about_me TEXT,
    member_since datetime DEFAULT CURRENT_TIMESTAMP,
    last_seen datetime DEFAULT CURRENT_TIMESTAMP,
    avatar_hash VARCHAR(255),
    followed INT(11),
    followers INT(11),
    FOREIGN KEY (role_id) REFERENCES roles(id) ON DELETE CASCADE,
    PRIMARY KEY (id)
    ) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
    AUTO_INCREMENT=1;

    执行上述脚本后,您应该能够在MySQL中看到新创建的表。

  2. 接下来,需要在Flask应用程序的配置文件中设置数据库连接信息。通常,这涉及到修改 SQLALCHEMY_DATABASE_URI 配置项,例如:
  3. class TestingConfig(Config):
    TESTING = True
    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:[email protected]:3306/data_test'

    完成以上配置后,Flask-SQLAlchemy即可通过ORM(对象关系映射)方式访问MySQL数据库,无需直接在MySQL命令行中进行复杂操作。

  4. 在实践中,将Flask-SQLAlchemy的关系模型映射到MySQL数据库中可能会遇到一些挑战,特别是对于初学者而言。其中,理解 db.relationship 的工作原理至关重要。例如,当我们在 roles 表中定义 users = db.relationship('User', backref='role', lazy='dynamic') 时,实际上是告诉SQLAlchemy,每个角色可以关联多个用户,同时在 users 表中定义了一个外键 role_id,指向 roles 表的主键 id。如果试图向 users 表插入一个不存在于 roles 表中的 role_id,将会导致错误。

此外,backref 参数允许我们从用户对象直接访问相关联的角色对象,而无需额外定义反向关系。设置 lazy='dynamic' 则意味着查询时不会立即加载所有相关记录,而是返回一个查询对象,从而允许进一步的查询定制。

参考资源包括但不限于MySQL官方文档、Flask-SQLAlchemy官方文档以及相关的社区论坛讨论,这些资料对于深入理解和解决实践中遇到的问题非常有帮助。


推荐阅读
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 本文介绍如何在 Android 中通过代码模拟用户的点击和滑动操作,包括参数说明、事件生成及处理逻辑。详细解析了视图(View)对象、坐标偏移量以及不同类型的滑动方式。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
author-avatar
天才野猪518
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有