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://idctop.com/flask%e5%a6%82%e4%bd%95%e6%9f%a5%e8%af%a2mysql%e6%95%b0%e6%8d%ae%e5%ba%93%ef%bc%9fflask%e8%bf%9e%e6%8e%a5mysql%e5%ae%9e%e7%8e%b0%e5%a2%9e%e5%88%a0%e6%94%b9%e6%9f%a5/

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

相关推荐

  • 统信服务器怎么用命令进入c盘?,统信服务器进c盘命令是什么

    统信服务器没有Windows意义上的C盘,无法用cd C:进入;正确做法是用lsblk、fdisk -l或blkid找到Windows分区,挂载到/mnt/windows_c这类目录,再cd进入挂载点, 这件事的关键不是记一个命令,而是理解Linux“先挂载、后访问”的规则,统信服务器怎么用命令进入C盘:先搞懂……

    程序编程 2026年10月23日
    000
  • 服务器ecs能装安全狗吗?ECS云服务器怎么安装安全狗

    服务器ECS完全可以安装安全狗,这是提升云服务器防御能力的有效手段之一,但在安装前必须确认系统兼容性并解决环境依赖问题,否则极易导致安装失败或系统服务异常,安全狗作为一款流行的服务器安全加固软件,其功能覆盖了系统防护、网站防护及流量防护等多个维度,对于缺乏专业运维团队的中小企业或个人开发者而言,是保障ECS实例……

    2026年4月8日
    8800
  • 服务器3850开机按键在哪?服务器3850开机按钮位置图解

    服务器3850开机按键:精准定位、高效操作与故障排查的实战指南当服务器3850无法启动时,开机按键是第一响应入口,也是最常被误判的故障点,大量一线运维经验表明:超过65%的“假性死机”问题,仅通过规范操作开机按键即可恢复,本文基于IBM System x3850 M2/M3/M4系列真实部署场景,提供可立即执行……

    2026年4月17日
    5500
  • 三旺串口服务器RS485怎么接才正确?,接线步骤是什么?

    三旺串口服务器RS485接线,核心就三步:确认设备端子定义、接A/B线和公共地、设置好终端电阻,只要线序对、地线通、终端匹配到位,基本就能稳定通讯,下面按实操场景拆解,直接照着做就行,RS485接线前先搞懂三旺设备的端口逻辑很多用户拿到三旺串口服务器(比如NP311、NPort系列),第一反应是找“RS485……

    2026年10月4日
    000
  • 租服务器送的防御带宽到底够用吗?,服务器带宽防御怎么选?

    租服务器送的防御和带宽,多数情况下只够兜住基础流量和小打小闹的攻击,真到业务上量或被人盯上时,大概率不够用,厂商把“送防御、送带宽”写进套餐页,本质是降低你下单的心理门槛,而不是替你扛住真实业务压力,下面把“送”的那部分拆开看,再给几个能直接上手验证的操作,厂商说的“送防御送带宽”,送的是什么先别急着看数字,先……

    程序编程 2026年10月21日
    100
  • OneTechCloudVPS测评,9929、4837、双ISP实测数据与性能表现,OneTechCloudVPS好用吗

    OneTechCloud VPS在2026年展现出极高的性价比,其双ISP架构与实测带宽稳定性优于同价位竞品,是中小开发者与跨境电商卖家构建低延迟业务的首选方案,在云计算市场高度内卷的2026年,选择VPS不再仅看价格,更看重网络质量与底层架构的稳定性,OneTechCloud凭借独特的双ISP(互联网服务提供……

    2026年5月14日
    4100
  • 古剑奇谭网页版怎么查看登录服务器,登录服务器在哪查?

    想查古剑奇谭web最后登录的区服,最快就是登录当初玩游戏的平台账号,进“用户中心”找最近登录记录;如果平台入口找不到,就直接启动游戏看选区列表里有没有“上次登录”或高亮区服,多数情况下三分钟内能定位,古剑奇谭web怎么查自己登陆的服务器?先翻账号中心网页游戏的区服记录跟账号绑定,跟电脑、浏览器、IP都没关系,你……

    2026年9月17日
    200
  • 奥迪A4服务器到期了怎么办,解决方法有哪些

    奥迪A4车载服务器到期,并不会让车辆瘫痪或影响基础驾驶,它只意味着车内的在线联网服务到期停止,解决路径只有两条:一是付费续费官方服务,二是通过手机互联或第三方盒子替代补齐这些功能,接下来把这套逻辑从原理到操作拆开讲清楚,奥迪A4服务器到期怎么处理?关键在分清“硬故障”和“软过期”很多车主一看中控屏弹出“服务已到……

    2026年10月6日
    000
  • 8月23号我的世界ice服务器究竟怎么了,原因是什么?

    8月23日,我的世界Ice服务器因遭遇大规模DDoS攻击导致全线瘫痪,玩家数据出现大面积回档,官方紧急维护后于次日逐步恢复,并发布了补偿方案,我的世界Ice服务器8月23日到底怎么了那天下午,很多玩家突然发现延迟飙到离谱,接着就彻底连不上服务器,社区里瞬间炸锅,有人说是被攻击,有人猜是插件崩了,官方随后发公告确……

    2026年8月18日
    2100
  • 苹果M1怎么看程序版本号与服务器不符?,怎么解决

    遇到“程序版本号与服务器不符”的提示,说明你本地应用版本与服务器端要求的不一致,通常需要更新或重新安装对应版本才能继续使用, 对于M1芯片的Mac用户,这个问题更有可能是由应用兼容性、缓存冲突或下载来源不正规引起的,下面从排查到修复,一步步拆解,M1 Mac软件版本号与服务器不符怎么办检查应用来源官方App S……

    2026年7月26日
    600

发表回复

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