Flask结合PyMySQL操作MySQL数据库实战指南

江岸
江岸
发布时间:2026-10-13| 4人浏览过
原创

本文详细介绍如何在Flask项目中集成Flask-SQLAlchemy与PyMySQL模块,实现与MySQL数据库的高效交互。内容涵盖ORM概念解析、环境安装配置、数据模型定义(包括一对多关系)、以及增删改查(CRUD)的具体代码实现与事务处理,为Python开发者提供完整的数据库操作示例。

首先需要安装flask-sqlalchemy和pymysql这两个核心模块,以便在Python环境中使用ORM框架和数据库驱动。

pip install flask-sqlalchemy pymysql 

### 深入理解Flask-SQLAlchemy

1. ORM即对象关系映射(Object Relationship Mapping)。

2. Flask-SQLAlchemy是一套专为Flask设计的ORM框架工具。

3. 使用ORM的主要优势在于简化数据库操作,使其行为类似于操作普通对象。通过将数据库表抽象为类,将数据行抽象为类的实例,开发者可以更加直观和便捷地处理数据。

4. 执行安装命令:`sudo pip install flask-sqlalchemy`。

接下来,确保本地已安装MySQL数据库服务。

from flask.ext.sqlalchemy import SQLAlchemy 
from flask import Flask 
 
'''配置数据库'''
app = Flask(__name__) 
app.config['SECRET_KEY'] ='hard to guess'
# 这里登陆的是root用户,要填上自己的密码,MySQL的默认端口是3306,填上之前创建的数据库名jianshu,连接方式参考 \ 
# http://docs.sqlalchemy.org/en/latest/dialects/mysql.html 
app.config['SQLALCHEMY_DATABASE_URI']='mysql+pymysql://jianshu:jianshu@127.0.0.1:3306/jianshu'
#设置这一项是每次请求结束后都会自动提交数据库中的变动 
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN']=True
#实例化 
db = SQLAlchemy(app)

模型定义环节

'''定义模型,建立关系'''
class Role(db.Model): 
 # 定义表名 
 __tablename__ = 'roles'
 # 定义列对象 
 id = db.Column(db.Integer, primary_key=True) 
 name = db.Column(db.String(64), unique=True) 
 user = db.relationship('User', backref='role') 
 
 #repr()方法显示一个可读字符串,虽然不是完全必要,不过用于调试和测试还是很不错的。 
 def __repr__(self): 
  return '<Role {}> '.format(self.name) 
 
class User(db.Model): 
 __tablename__ = 'users'
 id = db.Column(db.Integer, primary_key=True) 
 username = db.Column(db.String(64), unique=True, index=True) 
 role_id = db.Column(db.Integer, db.ForeignKey('roles.id')) 
 
 def __repr__(self): 
  return '<User {}>'.format(self.username)

  

关系定义

关系型数据库通过关联不同表来建立连接。关系图展示了用户与用户角色之间的简单关联:这是一种一对多关系,即一个角色可以分配给多个用户,而每个用户只能归属于一个特定角色。 下方的模型类代码展示了这种一对多关系的具体实现方式。

class Role(db.Model): 
 # ... 
 users = db.relationship('User', backref='role') 
 
class User(db.Model): 
 # ... 
 role_id = db.Column(db.Integer, db.ForeignKey('roles.id')) 

#!/usr/bin/env python 
 
from exts import db 
from datetime import datetime 
 
 
class User(db.Model): 
 __tablename__ = 'user'
 id = db.Column(db.Integer,primary_key=True,autoincrement=True) 
 username = db.Column(db.String(50),nullable=False) 
 telephone = db.Column(db.String(11),nullable=False) 
 password = db.Column(db.String(100), nullable=False) 
 
class Questions(db.Model): 
 __tablename__ = 'questions'
 id = db.Column(db.Integer,primary_key=True,autoincrement=True) 
 title = db.Column(db.String(100),nullable=False) 
 content = db.Column(db.Text,nullable=False) 
 create_time = db.Column(db.DateTime,default=datetime.now) 
 author_id = db.Column(db.Integer,db.ForeignKey('user.id')) 
 
 author = db.relationship('User',backref=db.backref('questions')) 
 
class Answer(db.Model): 
 __tablename__ = 'answer'
 id = db.Column(db.Integer,primary_key=True,autoincrement=True) 
 content = db.Column(db.Text,nullable=False) 
 question_id = db.Column(db.Integer,db.ForeignKey('questions.id')) 
 author_id = db.Column(db.Integer,db.ForeignKey('user.id')) 
 
 question = db.relationship('Questions',backref = db.backref('answers')) 
 author = db.relationship('User',backref = db.backref('answers'))

Flask-SQLAlchemy实现数据的增、删、改、查操作:

1. 数据新增:

# 新增数据示例: article1 = Article(title='aaa',content='bbb') db.session.add(article1) # 提交事务 db.session.commit()

2. 数据查询:

# 查询数据 # 对应SQL: select * from article where article.title='aaa'; article1 = Article.query.filter(Article.title == 'aaa').first() print 'title:%s' % article1.title print 'content:%s' % article1.content

3. 数据修改:

# 修改数据: # 1. 首先查询需要更新的数据记录 article1 = Article.query.filter(Article.title == 'aaa').first() # 2. 对需要修改的字段进行赋值更新 article1.title = 'new title' # 3. 提交事务以保存更改 db.session.commit()

4. 数据删除:

``` # 删除数据 # 1. 查询需要删除的数据记录 article1 = Article.query.filter(Article.content == 'bbb').first() # 2. 执行删除操作 db.session.delete(article1) # 3. 提交事务确认删除 db.session.commit() ```

以上即为Flask结合PyMySQL操作MySQL数据库的完整实例分享,希望能为各位开发者提供有价值的参考,也欢迎大家继续支持本站获取更多技术内容。

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

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 算法库。