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

相关推荐

  • AI互动课开发套件双十一优惠活动有哪些,双十一买AI互动课开发套件划算吗?

    对于教育科技公司、培训机构以及内容创作者而言,抓住双十一这一年度大促节点升级技术底座,是实现降本增效与业务跃迁的关键战略决策,通过引入高集成度的AI互动课开发套件,企业能够以极具性价比的成本,将传统录播课程快速转化为具备高沉浸感、强交互性的智能课程,从而在激烈的市场竞争中构建核心壁垒, 行业痛点与转型契机当前……

    2026年2月24日
    14600
  • AIoT投资技巧有哪些?新手如何投资AIoT赚钱

    AIoT(人工智能物联网)投资的核心逻辑在于精准捕捉“技术落地”与“场景爆发”的交汇点,而非盲目追逐单一技术概念,成功的投资策略必须从单纯的硬件制造思维转向“端边云网智”全栈能力的价值评估,重点关注具备数据闭环能力与垂直场景深耕优势的龙头企业, 当前AIoT产业已度过概念炒作期,进入业绩验证阶段,投资者需构建以……

    2026年3月22日
    11800
  • AIoT科技大赛是什么?AIoT科技大赛报名条件有哪些?

    AIoT科技大赛已成为推动人工智能与物联网深度融合的关键引擎,其核心价值在于通过竞技模式加速技术落地、挖掘顶尖人才、构建产业生态,这一赛事不仅是技术实力的角逐场,更是连接学术理论与商业应用的桥梁,能够有效解决AIoT领域技术碎片化与场景落地难的问题,为智慧城市、工业互联网及智能家居等场景提供标准化的解决方案,技……

    2026年3月19日
    9800
  • AI文案生成器哪个好用,免费AI文案怎么写?

    AI文案技术的成熟标志着内容营销领域正在经历一场从人力密集型向人机协作型转变的深刻变革,核心结论在于:AI文案并非要取代人类创作者,而是作为一种强大的生产力杠杆,通过提升效率、数据驱动决策和规模化产出,重塑内容供应链,最终实现营销效果的最大化, 企业若能掌握人机协作的精髓,将在流量获取和转化竞争中占据绝对优势……

    2026年2月21日
    16400
  • AI视频审核租用价格是多少?2026年最新收费标准

    2026年AI视频审核租用价格通常在每千帧0.5元至5元人民币之间波动,具体取决于审核深度、并发量级及是否包含定制模型训练,对于大多数企业而言,采用“基础云API+少量定制”的混合模式是性价比最高的选择,随着短视频、直播电商以及UGC平台的爆发式增长,内容安全已成为互联网企业的生命线,传统的纯人工审核不仅成本高……

    程序编程 2026年6月9日
    3200
  • AI养羊是真的吗?人工智能养羊前景怎么样?

    智慧畜牧业的浪潮正在重塑传统养殖业,其中人工智能技术在养羊领域的应用已从概念走向全面落地,核心结论在于:AI养羊技术通过计算机视觉、物联网与大数据分析的深度融合,实现了对羊群生长健康的全天候精准监测与智能化管理,不仅解决了规模化养殖中劳动力短缺与监管困难的痛点,更将养殖综合效益提升了20%以上,是现代畜牧业降本……

    2026年2月24日
    13100
  • 如何在Excel中运行命令?excel运行命令的具体步骤

    在Excel中运行命令的核心方法是通过“宏”(VBA)或“Power Query”实现自动化,其中VBA适合复杂逻辑处理,Power Query适合数据清洗与转换,选择哪种方式取决于你的具体业务场景,很多职场人提到Excel,第一反应是敲键盘、点鼠标,但面对成千上万行重复数据时,这种传统方式不仅效率低下,还容易……

    2026年7月12日
    10300
  • PS5 EA服务器目前不可用怎么办,怎么解决?

    遇到“PS5 EA服务器目前不可用请稍后再试”提示,通常是网络连接问题或EA服务器临时故障,重启设备、检查网络并等待官方修复是最直接的解决办法,PS5 EA服务器不可用是什么原因遇到PS5 EA服务器无法连接,多数情况下并非PS5主机或EA账号本身损坏,而是网络环境或服务器状态导致的暂时性障碍,搞清楚原因才能对……

    2026年7月23日
    2200
  • win7如何关闭远程服务器端口命令行,具体步骤是什么

    在Windows 7系统中,通过命令行关闭远程服务器端口的核心方法是使用netsh advfirewall命令添加阻止规则,或结合netstat与taskkill终止进程,但前者更持久可靠,win7远程服务器端口关闭命令行的两种主流方法关闭远程服务器端口,命令行比图形界面更高效,适合批量部署或远程管理,以下两种……

    2026年8月20日
    800
  • AIoT车队管理系统是什么?智能车队管理解决方案推荐

    AIoT车队管理系统通过深度融合人工智能与物联网技术,实现了车队运营的智能化、数据化和精细化,是企业降本增效、提升安全水平的核心工具,该系统不仅解决了传统车队管理中“盲人摸象”的痛点,更通过实时数据采集与智能算法分析,构建起一套可视、可控、可预测的数字化管理闭环,直接推动企业物流效率提升20%以上,事故率降低1……

    2026年3月19日
    11800

发表回复

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