Flask如何查询MySQL数据库?Flask连接MySQL实现增删改查

在 Flask 中查询 MySQL 数据库,通常有以下几种主流方式:

  1. Flask-SQLAlchemy(推荐,ORM 方式,适合大多数项目)
  2. PyMySQL + Flask(原生 SQL 方式,轻量级)
  3. SQLAlchemy + Flask(不使用 Flask-SQLAlchemy 扩展,更灵活)

下面我将分别介绍这三种方式,并提供完整示例。

python flask连接mysql数据库实现登录注册
加载中
python flask连接mysql数据库实现登录注册

✅ 方式一:使用 Flask-SQLAlchemy(推荐)

安装依赖

pip install Flask Flask-SQLAlchemy pymysql

配置数据库连接

app.py 中:

from flask import Flask, jsonify
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
# 配置 MySQL 数据库连接
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://username:password@localhost:3306/your_database'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# 初始化 SQLAlchemy
db = SQLAlchemy(app)
# 定义模型(表结构)
class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50), nullable=False)
    email = db.Column(db.String(100), unique=True, nullable=False)
    def to_dict(self):
        return {
            'id': self.id,
            'name': self.name,
            'email': self.email
        }
# 创建表(首次运行)
with app.app_context():
    db.create_all()
# 查询所有用户
@app.route('/users', methods=['GET'])
def get_users():
    users = User.query.all()
    return jsonify([user.to_dict() for user in users])
# 根据 ID 查询用户
@app.route('/users/<int:user_id>', methods=['GET'])
def get_user(user_id):
    user = User.query.get(user_id)
    if user:
        return jsonify(user.to_dict())
    else:
        return jsonify({'error': 'User not found'}), 404
if __name__ == '__main__':
    app.run(debug=True)

Flask如何查询MySQL数据库?Flask连接MySQL实现增删改查

常用查询示例

# 查询所有
users = User.query.all()
# 查询第一个
first_user = User.query.first()
# 根据 ID 查询
user = User.query.get(1)
# 条件查询
users = User.query.filter_by(name='Alice').all()
users = User.query.filter(User.email.like('%@gmail.com')).all()
# 分页查询
users = User.query.paginate(page=1, per_page=10)
# 统计数量
count = User.query.count()
# 复杂查询
users = User.query.filter(User.name.like('%a%')).order_by(User.id.desc()).all()

✅ 方式二:使用 PyMySQL + Flask(原生 SQL)

安装依赖

pip install Flask pymysql

示例代码

from flask import Flask, jsonify
import pymysql
app = Flask(__name__)
# 数据库配置
DB_CONFIG = {
    'host': 'localhost',
    'user': 'username',
    'password': 'password',
    'database': 'your_database',
    'charset': 'utf8mb4',
    'cursorclass': pymysql.cursors.DictCursor
}
# 获取数据库连接
def get_db_connection():
    return pymysql.connect(DB_CONFIG)
# 查询所有用户
@app.route('/users', methods=['GET'])
def get_users():
    conn = get_db_connection()
    try:
        with conn.cursor() as cursor:
            sql = "SELECT id, name, email FROM users"
            cursor.execute(sql)
            users = cursor.fetchall()
        return jsonify(users)
    finally

Flask如何查询MySQL数据库?Flask连接MySQL实现增删改查

: conn.close() # 根据 ID 查询用户 @app.route('/users/<int:user_id>', methods=['GET']) def get_user(user_id): conn = get_db_connection() try: with conn.cursor() as cursor: sql = "SELECT id, name, email FROM users WHERE id = %s" cursor.execute(sql, (user_id,)) user = cursor.fetchone() if user: return jsonify(user) else: return jsonify({'error': 'User not found'}), 404 finally: conn.close() if __name__ == '__main__': app.run(debug=True)

✅ 方式三:使用 SQLAlchemy + Flask(不使用 Flask-SQLAlchemy)

安装依赖

pip install Flask SQLAlchemy pymysql

示例代码

from flask import Flask, jsonify
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
app = Flask(__name__)
# 数据库引擎
engine = create_engine('mysql+pymysql://username:password@localhost:3306/your_database')
# 创建基类
Base = declarative_base()
# 定义模型
class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String(50), nullable=False)
    email = Column(String(100), unique=True, nullable=False)
# 创建会话工厂
Session = sessionmaker(bind=engine)
# 创建表
Base.metadata.create_all(engine)
# 查询所有用户
@app.route('/users', methods=['GET'])
def get_users():
    session = Session()
    try:
        users = session.query(User).all()
        return jsonify([
            {'id': user.id, 'name': user.name, 'email': use

Flask如何查询MySQL数据库?Flask连接MySQL实现增删改查

r.email} for user in users ]) finally: session.close() # 根据 ID 查询用户 @app.route('/users/<int:user_id>', methods=['GET']) def get_user(user_id): session = Session() try: user = session.query(User).filter_by(id=user_id).first() if user: return jsonify({ 'id': user.id, 'name': user.name, 'email': user.email }) else: return jsonify({'error': 'User not found'}), 404 finally: session.close() if __name__ == '__main__': app.run(debug=True)

📌 总结对比

方式 优点 缺点 适用场景
Flask-SQLAlchemy 简单、易用、ORM 支持好 依赖较多 大多数 Flask 项目
PyMySQL + Flask 轻量、灵活、原生 SQL 需要手动管理连接和 SQL 注入 简单项目、需要精细控制 SQL
SQLAlchemy + Flask 灵活、不依赖 Flask 扩展 配置稍复杂 需要高度定制化的项目

⚠️ 安全提示

  1. 防止 SQL 注入:使用参数化查询(如 cursor.execute(sql, (param,)) 或 ORM 的 filter_by
  2. 使用环境变量:数据库密码不要硬编码,使用 os.environ.env 文件
  3. 连接池:生产环境建议使用连接池(如 SQLAlchemy 自带的连接池)

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://test.idctop.com/article/486645.html

(0)
服务器后台价格是多少?服务器搭建与维护费用详解
上一篇 2026年7月12日 11:39
服务器怎么启动mysql数据库?mysql服务启动失败怎么办
下一篇 2026年7月12日 11:43

相关推荐

  • u8局域网连接服务器失败怎么办?,怎么回事

    u8局域网连接服务器失败通常由网络配置错误、防火墙拦截或服务未启动引起,按照网络连通性检查和端口测试即可定位问题,u8局域网连接服务器失败的常见原因网络配置问题导致连接失败客户端与服务器不在同一网段,或IP地址冲突,是多数连接失败的根源,在同一个局域网内,如果服务器使用固定IP,而客户端设置为自动获取,可能因D……

    2026年8月23日
    300
  • DNS域名系统是什么?dns域名系统解析原理

    关于dns域名系统在云计算与服务器架构的底层逻辑中,DNS(Domain Name System,域名系统) 往往被普通用户忽视,但对于追求极致性能、高可用性(High Availability)以及全球业务部署的企业级用户而言,DNS解析的速度与稳定性直接决定了网站的打开速度、容灾能力以及用户体验的上限,本文……

    2026年6月15日
    19900
  • AI外呼打折是真的吗?智能电话机器人优惠价格表

    AI外呼打折:智能降本增效,重塑销售转化新路径AI外呼技术通过自动化、智能化的呼叫流程,为企业提供了一种高效、低成本的客户触达与营销方式,其核心价值在于显著降低传统外呼的人力与时间成本(即实现“打折”效果),同时提升外呼效率、客户体验与转化率,是智能营销时代降本增效的关键工具, AI外呼的“打折”价值:成本锐减……

    2026年2月15日
    15630
  • 开发团队由哪些人组成?互联网创业公司技术团队架构解析

    高效的开发团队组成是软件项目成功的基石,其核心在于构建“全能且互补”的人才结构,而非单纯的人员堆砌,一个成熟的开发团队,必须具备清晰的角色分工、合理的层级比例以及高效的协作机制,才能确保从需求分析到产品上线的每一个环节都精准无误,专业的团队搭建遵循“精简、高效、责权分明”的原则,通过科学的配置实现人力成本与产出……

    2026年4月1日
    11700
  • 手机怎么打开开发模式?开发者选项在哪里开启

    手机开启开发者模式的核心价值在于解锁系统底层权限,实现高级功能调试与性能优化,这一操作对普通用户与技术人员均有重要意义,开发者模式并非仅为程序员专属,普通用户通过合理配置可提升设备流畅度、缩短操作路径,甚至解决系统卡顿等疑难问题,但需谨慎操作以避免误改关键参数,开发者模式的核心功能与应用场景开发者模式隐藏于手机……

    2026年4月1日
    12800
  • 什么是单点登录解决方案?单点登录SSO技术原理

    关于单点登录的解决方案在数字化转型的深水区,企业级应用架构的复杂性呈指数级增长,传统的账号管理体系不仅导致用户记忆负担加重,更成为安全漏洞的高发区,单点登录(Single Sign-On, SSO)作为解决这一痛点的关键技术,已成为现代IT基础设施的标配,市面上SSO解决方案良莠不齐,如何从服务器性能、协议兼容……

    2026年5月30日
    4300
  • mule 开发是什么?mule 开发教程入门指南

    Mule 开发是实现企业级系统集成与数字化转型的最优解,其核心价值在于通过轻量级、可扩展的架构,快速连接异构系统,降低集成成本,提升业务响应速度,企业通过采用 MuleSoft 的 Anypoint Platform,能够构建统一的应用网络,彻底打破数据孤岛,实现业务流程的无缝编排,这种开发模式不仅提高了资产复……

    2026年3月28日
    9900
  • VULTR新用户注册送300美元是真的吗?vultr新用户注册送300美元怎么领

    VULTR新用户注册即送300美元,覆盖美国、日本、新加坡等32个全球机房,是低成本部署高性能云服务器的首选方案,在云计算市场日益成熟的今天,寻找一款既稳定又具备极高性价比的云服务器产品,对于个人开发者、初创团队以及需要跨境业务的企业来说至关重要,VULTR作为业内知名的云服务商,凭借其灵活的计费模式和广泛的全……

    2026年6月30日
    1300
  • 云计算和大数据到底是什么关系?云计算和大数据的区别

    关于云计算和大数据的表述在数字化转型的深水区,云计算与大数据已不再是单纯的技术概念,而是企业构建核心竞争力的基础设施,对于从事数据分析、机器学习训练及海量日志处理的企业而言,服务器的选型直接决定了数据处理的时效性、成本效率以及系统的稳定性,本文旨在通过深度实测,解析当前主流云服务器在应对高并发数据吞吐与复杂计算……

    2026年6月6日
    4300
  • r语言数据可视化论文怎么写?r语言数据可视化实战案例

    在数据科学、机器学习以及大规模数据分析领域,R语言作为统计分析的基石,其生态系统的庞大与成熟度毋庸置疑,随着数据规模的指数级增长,本地开发环境往往受限于内存容量、CPU核心数以及GPU加速能力,导致可视化渲染(如ggplot2处理百万级数据点)或模型训练出现严重的性能瓶颈,选择一款高性能、高稳定性的云服务器,对……

    2026年6月13日
    2600

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注