Flask框架配置MySQL数据库操作详解

Jasper
Jasper
发布时间:2026-10-13| 3人浏览过
原创

本文详细介绍如何在Flask框架中配置MySQL数据库。针对Python 3环境,推荐使用pymysql替代MySQLdb,并通过flask-sqlalchemy简化数据库操作。文章涵盖从环境配置、模型定义到蓝图路由的完整流程,提供基于蓝图的增删改查示例,帮助开发者快速掌握Flask与MySQL的集成方法。

Flask配置MySQL数据库概述

本文详细介绍如何在Flask框架中配置MySQL数据库操作,供读者参考学习。

本教程配置环境为Python 3.5和Flask 2.0。由于Python 3已不再支持MySQLdb模块,因此此处选用pymysql作为驱动,使用前需确保已安装该库。

环境准备与PyMySQL安装

安装pymysql:


pip install pymysql

网上许多资料使用SQLite作为示例,鉴于个人偏好,本文分享使用flask-sqlalchemy操作MySQL的方法。

以往习惯直接使用sqlalchemy,后发现flask-sqlalchemy更为简便,省去了大量模块和类的导入(如create_engine、sessionmaker、declarative等)。尽管Flask官方示例使用sqlalchemy,但本文参考flask-sqlalchemy官方文档进行讲解。

此处编写一个简单的Flask Web程序,演示flask-sqlalchemy如何驱动MySQL数据库。为简化示例,该程序基于上一篇关于Flask蓝图使用的文章构建。

首先查看程序目录结构:

相比上一节,此处仅增加了两个文件:create_db.py和models.py。

建立数据库连接与配置

1. 建立MySQL与App的连接

在config.py中添加以下两项配置:


SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:xxxxx@localhost:3306/test?charset=utf8'
SQLALCHEMY_TRACK_MODIFICATIONS = True

随后在app/__init__.py中加入相关代码:


app.config.from_object('config')
db = SQLAlchemy(app)

即可完成App与数据库的关联,并生成一个可操作App数据库的SQLAlchemy实例db。

完整的app/__init__.py代码如下:


from flask import Flask, url_for, request, redirect, render_template
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config.from_object('config')
db = SQLAlchemy(app)
from app import models,views

数据模型定义与表创建

2. 创建app/models.py模块

代码如下:

from app import db #db是在app/__init__.py生成的关联后的SQLAlchemy实例


class User(db.Model):
 __tablename__ = 'users'
 id = db.Column(db.Integer, primary_key=True)
 username = db.Column(db.String(80), unique=True)
 email = db.Column(db.String(320), unique=True)
 password = db.Column(db.String(32), nullable=False)
 def __repr__(self):
  return '<User %r>' % self.username
class Admin(db.Model):
 __tablename__ = 'admins'
 id = db.Column(db.Integer, primary_key=True)
 username = db.Column(db.String(80), unique=True)
 email = db.Column(db.String(320), unique=True)
 password = db.Column(db.String(32), nullable=False)
 def __repr__(self):
  return '<User %r>' % self.username

3. 创建create_db.py,表结构设计完成后执行python create_db.py即可完成表的创建,如下图所示:

#app/create_db.py


from app import db
db.create_all()

业务逻辑与蓝图路由实现

4. 表已创建完成,接下来是业务逻辑使用表的环节。

分别在user和admin蓝图中增加一个添加用户的业务逻辑。

#app/user.py


from flask import Blueprint, render_template, redirect,request
from app import db
from .models import User
user = Blueprint('user',__name__)
@user.route('/index')
def index():
 return render_template('user/index.html')
@user.route('/add/',methods=['GET','POST'])
def add():
 if request.method == 'POST':
  p_user = request.form.get('username',None)
  p_email = request.form.get('email',None)
  p_password = request.form.get('password',None)
  if not p_user or not p_email or not p_password:
   return 'input error'
  newobj = User(username=p_user, email=p_email, password=p_password)
  db.session.add(newobj)
  db.session.commit()
  users = User.query.all()
  return render_template('user/add.html',users=users)
 users = User.query.all()
 return render_template('user/add.html',users=users)
@user.route('/show')
def show():
 return 'user_show'

#app/admin.py


#admin.py
from flask import Blueprint,render_template, request, redirect
from app import db
from .models import Admin
admin = Blueprint('admin',__name__)
@admin.route('/index')
def index():
 return render_template('admin/index.html')
@admin.route('/add/',methods=['POST','GET'])
def add():
 if request.method == 'POST':
  p_admin = request.form.get('username',None)
  p_email = request.form.get('email',None)
  p_password = request.form.get('password',None)
  if not p_admin or not p_email or not p_password:
   return 'input error'
  newobj = Admin(username=p_admin, email=p_email, password=p_password)
  db.session.add(newobj)
  db.session.commit()
  admins = Admin.query.all()
  return render_template('admin/add.html',admins=admins)
 admins = Admin.query.all()
 return render_template('admin/add.html',admins=admins)
@admin.route('/show')
def show():
 return 'admin_show'

#app/templates/admin/add.html


<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>AdminsAdd</title>
</head>
<body>
<form action="/admin/add/" method="POST">
 user:<input type="text" name="username" />
 email:<input type="text" name="email" />
 pwd:<input type="password" name="password" />
 <input type="submit" value="add" />
</form>
{% if admins %}
<table border="1px">
 <tr>
  <th>UserName</th>
  <th>Email</th>
 </tr>
 {% for u in admins %}
  <tr>
   <td>{{u.username}}</td>
   <td>{{u.email}}</td>
  </tr>
 {% endfor %}
</table>
{% endif %}
</body>
</html>

#app/templates/user/add.html


<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>UserAdd</title>
</head>
<body>
<form action="/user/add/" method="POST">
 user:<input type="text" name="username" />
 email:<input type="text" name="email" />
 pwd:<input type="password" name="password" />
 <input type="submit" value="add" />
</form>
{% if users %}
<table border="1px">
 <tr>
  <th>UserName</th>
  <th>Email</th>
 </tr>
 {% for u in users %}
  <tr>
   <td>{{u.username}}</td>
   <td>{{u.email}}</td>
  </tr>
 {% endfor %}
</table>
{% endif %}
</body>
</html>

#app/views.py


from app import app
from .admin import admin
from .user import user
app.register_blueprint(admin,url_prefix='/admin')
app.register_blueprint(user, url_prefix='/user')

#run.py


from app import app
app.run()

至此示例结束,本例结合了蓝图和flask-sqlalchemy。本例中仅使用了db.session.add(),其他还有db.session.delete()等。

查看运行效果:

访问localhost:5000/user/add

访问localhost:5000/admin/add

希望本文所述对大家基于Flask框架的Python程序设计有所帮助。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。