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/article/486645.html

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

相关推荐

  • AIoT的风口真的来了吗?AIoT行业发展趋势与投资机会解析

    AIoT(智能物联网)正处于从概念落地走向产业爆发的关键转折期,其核心驱动力在于“智能”与“连接”的深度融合,正在重塑物理世界与数字世界的边界,未来三到五年,将是企业抢占AIoT赛道红利、实现数字化转型的决定性窗口期,这不仅是技术的迭代,更是商业模式的重构,万物互联正在向万物智联加速演进,谁能解决数据碎片化与场……

    2026年3月15日
    11700
  • ReCloud 618活动怎么买最划算?新加坡商宽BGP首10台5折

    ReCloud 618大促核心结论:新加坡商宽BGP前10台5折后8折,美英系列全线5折,其他亚洲节点75折,活动覆盖续费周期,2026年的网络环境对稳定性和速度的要求达到了前所未有的高度,对于需要跨境业务的企业和个人开发者来说,选择正确的机房和线路是业务成功的基石,ReCloud此次618活动力度空前,不仅覆……

    2026年6月27日
    2600
  • ajax如何读取mysql数据库?ajax读取mysql数据库实现方法

    AJAX读取MySQL数据库的核心在于利用JavaScript的XMLHttpRequest或Fetch API异步发送HTTP请求至后端脚本(如PHP/Node.js),后端查询数据库后返回JSON格式数据,前端解析并局部更新DOM,从而实现无刷新数据交互,在现代Web开发中,用户对于页面加载速度的容忍度极低……

    2026年5月30日
    3400
  • AIoT摩迈优品是什么?摩迈优品智能设备好用吗

    AIoT摩迈优品通过深度整合智能硬件与云端算法,为家庭及小微企业提供了一站式物联网解决方案,其核心价值在于以极低的部署门槛实现设备间的无缝协同与数据自动化处理,在2026年的智能家居与工业互联网领域,单纯连接设备已不再是竞争壁垒,真正的痛点在于如何让不同品牌的设备“听懂”彼此的语言,并基于用户习惯主动提供服务……

    2026年6月12日
    3000
  • Alertjs弹出框插件怎么用?alertjs弹窗配置参数详解

    AlertJS是一款轻量级、零依赖且高度可定制的JavaScript弹窗库,它通过原生DOM操作替代系统默认alert,能显著提升Web应用的交互体验与视觉一致性,是目前前端开发中替代原生弹窗的首选方案之一,在Web开发领域,原生浏览器弹窗(alert/confirm/prompt)虽然简单,但其样式固定、阻断……

    程序编程 2026年6月1日
    3700
  • ajax向服务端发送大数据怎么解决?ajax传输大量数据方法

    向服务端发送大数据时,直接拼接JSON参数极易导致请求头溢出或超时,最佳实践是采用分块上传(Chunked Transfer)结合FormData对象,配合后端流式接收,既能突破HTTP协议限制,又能显著降低内存占用并提升传输稳定性,在Web开发领域,前端向服务器传输数据是日常操作,但当数据量达到MB甚至GB级……

    2026年5月31日
    3300
  • asp仿站软件真的能完美复制网站吗?揭秘其局限性与风险

    ASP仿站软件是指专门设计用于快速复制、模仿或学习基于ASP(Active Server Pages)技术构建的网站结构和前端样式的工具集或程序,其核心价值在于帮助开发者、设计师或站长高效地获取目标网站的静态页面框架(HTML, CSS, JavaScript)以及部分资源文件(如图片),并可能提供将其转换为本……

    2026年2月4日
    10100
  • 服务器iis怎么建站?IIS建站详细步骤教程

    在IIS(Internet Information Services)服务器上搭建网站,核心流程在于正确配置站点标识、精准绑定域名与端口、以及严谨设置目录权限,这三者构成了建站成功的铁三角,对于追求高效运维的管理员而言,掌握IIS建站不仅是技术操作的堆砌,更是对Windows服务器环境资源调度能力的深度理解,通……

    2026年4月5日
    7800
  • OwOCloud萌凛云国内独服怎么选?上海联通深圳电信独服价格

    OwOCloud萌凛云通过提供上海联通9929、深圳电信BGP及上海多线BGP等精品独服,为对网络延迟、稳定性及合规性有极高要求的国内业务提供底层算力支撑,国内独立服务器选型的核心逻辑与场景匹配在选择国内独立服务器时,许多开发者往往陷入“配置越高越好”的误区,却忽视了网络线路与业务场景的契合度,业内专家指出,对……

    2026年6月26日
    2200
  • 构建云存储有哪些优势?云存储搭建方案

    构建云存储的核心在于根据数据敏感度选择混合架构,通过对象存储处理非结构化数据,块存储支撑高性能计算,并结合本地缓存实现成本与速度的最佳平衡,在数字化转型的深水区,企业和个人用户不再仅仅将云存储视为一个“网盘”,而是将其作为业务连续性的基石,传统的本地服务器维护成本高、扩展性差,而公有云虽然弹性强,但数据主权和合……

    2026年5月26日
    4500

发表回复

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