热门标签 | 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官方文档以及相关的社区论坛讨论,这些资料对于深入理解和解决实践中遇到的问题非常有帮助。


推荐阅读
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 解决PHP与MySQL连接时出现500错误的方法
    本文详细探讨了当使用PHP连接MySQL数据库时遇到500内部服务器错误的多种解决方案,提供了详尽的操作步骤和专业建议。无论是初学者还是有经验的开发者,都能从中受益。 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 本文详细记录了在基于Debian的Deepin 20操作系统上安装MySQL 5.7的具体步骤,包括软件包的选择、依赖项的处理及远程访问权限的配置。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
  • 本文详细介绍了HTML中标签的使用方法和作用。通过具体示例,解释了如何利用标签为网页中的缩写和简称提供完整解释,并探讨了其在提高可读性和搜索引擎优化方面的优势。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 尽管某些细分市场如WAN优化表现不佳,但全球运营商路由器和交换机市场持续增长。根据最新研究,该市场预计在2023年达到202亿美元的规模。 ... [详细]
  • 如何高效创建和使用字体图标
    在Web和移动开发中,为什么选择字体图标?主要原因是其卓越的性能,可以显著减少HTTP请求并优化页面加载速度。本文详细介绍了从设计到应用的字体图标制作流程,并提供了专业建议。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
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社区 版权所有