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

相关推荐

  • DediOutlet独立服务器测评,美国30.75美元/月实测数据与性能表现

    DediOutlet美国30.75美元/月独立服务器实测结论:性价比极高,适合对带宽要求不高但追求稳定性的中小型建站及开发场景,但需注意其洛杉矶节点的网络延迟波动及售后响应时效, 硬件配置与基础性能解析在2026年的VPS与独立服务器市场中,DediOutlet凭借“低门槛、高配置”的策略占据了一席之地,本次测……

    2026年5月16日
    4800
  • {ai不止一面}是什么意思,AI有哪些不为人知的一面?

    人工智能技术的爆发式增长,往往让人们陷入单一维度的认知误区,即过分关注其生成文本或图像的能力,而忽视了其作为底层基础设施的多元价值,核心结论在于:AI的本质是生产力工具的全面重构,其价值不仅体现在内容创作的“显性”层面,更深深扎根于决策优化、效率提升与技术融合的“隐性”维度,AI不止一面,它是多维度的技术集合体……

    2026年3月10日
    11400
  • AI抠图软件哪个好用,手机上免费AI抠图怎么操作

    ai抠图技术通过深度学习算法实现了图像背景的自动化分离,将传统耗时数小时的精细修图工作缩短至秒级完成,彻底重塑了电商设计、摄影后期及内容创作的工作流, 这项技术不仅大幅降低了图像处理的人力成本,更通过像素级的精准识别,解决了复杂边缘(如发丝、透明物体)的处理难题,成为现代视觉内容生产中不可或缺的基础设施, 技术……

    2026年2月18日
    17300
  • 长期稳定运行的贵阳大带宽租用费用怎么算,哪家好?

    贵阳大带宽租用费用主要由带宽大小、线路类型、机房等级和合约期限决定,长期稳定运行的业务建议优先选择BGP多线线路并签订年付合约,综合成本可控且稳定性高,贵阳大带宽租用费用怎么算?核心因素逐一拆解带宽大小与计费模式:保底还是按峰值?带宽是计费的基础,常见计费模式有两种:保底带宽和按峰值95计费,保底模式适合流量平……

    2026年8月12日
    500
  • ASP.NET请求处理如何工作?HttpHandler与HttpModule原理详解

    ASP.NET 请求从输入到输出的全过程是一个精密设计的管道处理模型,其核心在于HttpApplication对象、HttpModule和HttpHandler的协同工作,理解这个流程及关键组件对于构建高性能、可扩展的Web应用至关重要,ASP.NET 请求处理管道全貌当HTTP请求抵达IIS(或兼容服务器如I……

    2026年2月8日
    12960
  • AI智慧摄影效果怎么样?比传统摄影强在哪

    AI智慧摄影:重塑摄影艺术的未来AI智慧摄影正以惊人的速度改变着摄影行业的核心面貌,通过融合人工智能技术,它使摄影不再局限于专业技能,而是成为每个人都能轻松掌握的艺术表达工具,这一变革的核心在于AI的深度学习能力,它分析海量图像数据,实时优化拍摄效果,显著提升图像质量和创意可能性,无论你是业余爱好者还是专业摄影……

    2026年2月16日
    18900
  • VPS测评,实测体验与数据对比,VPS测评哪个好用,VPS测评

    2026年VPS测评结论:对于追求极致性价比与低延迟的国内用户,推荐选择搭载ARM架构或优化路由的国产轻量VPS;若需全球业务部署或高稳定性,则首选具备BGP多线接入的国际头部云厂商,实测数据显示其99.99%可用性远超中小服务商,核心性能实测:速度与稳定性的双重博弈在2026年的云计算市场,VPS的性能评估已……

    2026年5月14日
    4500
  • wifi连不上服务器咋回事,连上wifi上不了网怎么办?

    WiFi显示没有网络连接到服务器,核心原因是设备与互联网之间的连接链路断了,但路由器本身可能还在正常工作,这个提示通常意味着你的手机或电脑能连上WiFi,但无法访问外网服务器,问题可能出在光猫、路由器、宽带账号或设备设置上,为什么WiFi满格却提示连接不到服务器很多朋友遇到这种情况第一反应是路由器坏了,其实不然……

    程序编程 2026年8月8日
    2100
  • AIoT智慧地产是什么?AIoT智慧地产解决方案有哪些

    AIoT技术驱动下的地产数字化转型,已从单纯的概念炒作步入实质性落地阶段,其核心价值在于通过数据闭环实现资产运营效率的指数级提升与用户体验的根本性变革,未来的房地产竞争,将不再是单纯的土地储备与建筑规模之争,而是基于数字化服务的运营能力之争,AIoT智慧地产不仅仅是建筑的智能化,更是通过物联网感知、人工智能决策……

    2026年3月15日
    10100
  • java如何分别运行客户端与服务器端,有哪些方法?

    运行Java客户端与服务器端,本质上是分别启动两个独立的Java进程,客户端通过Socket向服务器发起连接,服务器监听端口并响应,从而实现数据交互,很多新手第一次接触Java网络编程时,最容易卡住的地方不是代码怎么写,而是写好之后怎么让两个程序分别跑起来,你可能会在同一个终端里先启动服务端,然后发现客户端连不……

    2026年8月13日
    400

发表回复

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