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

相关推荐

  • 手机怎么用Node.js搭建服务器端,有哪些步骤?

    在手机上搭建Node.js服务器早已不是新鲜事,借助Termux这类终端模拟器,你完全可以像在电脑上一样安装Node.js并运行服务端程序,为什么要在手机上折腾Node.js服务器当你手边没有电脑,又急需一个临时的Web服务来测试接口、共享文件或者运行一个简单的API时,手机就变成了最便携的“服务器”,近年来……

    程序开发 2026年8月9日
    1500
  • 如何用excel筛选数组?excel数组公式筛选多条件

    在 Excel 中,所谓的“筛选数组”通常指的是使用 动态数组函数(Dynamic Array Functions)来根据条件提取数据,并自动溢出到多个单元格中,这与传统的“高级筛选”或“Ctrl+Shift+Enter”数组公式不同,现代 Excel(Office 365、Excel 2021 及更新版本)提……

    2026年7月10日
    17300
  • 服务器是如何分配虚拟主机的,虚拟主机和服务器有什么区别?

    虚拟主机资源分配机制深度解析在选择虚拟主机时,核心关注点在于物理服务器资源的分配效率与隔离机制,虚拟主机(Shared Hosting)本质上是在一台高性能物理服务器上,通过虚拟化技术将资源切分给多个用户,优秀的分配机制能够确保在高峰期依然维持稳定的响应速度,避免因“邻居”流量激增而导致的性能下降,资源分配的核……

    程序开发 2026年7月13日
    18600
  • DNF进团本频道一直连接失败怎么办,团本频道进不去如何解决?

    DNF进团本频道一直服务器连接怎么办?先排查网络环境当DNF进入团本频道一直显示服务器连接时,绝大多数情况是本地网络波动或跨区频道拥堵导致,依次检查路由器状态、切换频道、使用网络加速器后即可正常进入,检查本地网络稳定性DNF团本频道对网络延迟和丢包率敏感,连接失败往往始于本地网络不稳,首先将路由器断电重启,等待……

    2026年8月8日
    600
  • 开通抖音商品橱窗需要什么条件?抖音橱窗开通门槛及流程详解

    抖音商品橱窗开通需要什么条件在当前的短视频与直播电商生态中,抖音商品橱窗已成为个人创作者及商家实现流量变现的核心基础设施,许多新手创作者在尝试开通时,常因对平台规则理解偏差或服务器环境配置不当,导致审核失败或后续运营出现稳定性问题,本文将深入解析抖音商品橱窗的开通硬性指标,并重点探讨在2026年高并发直播环境下……

    2026年7月7日
    9700
  • 元搜索引擎到底是什么?元搜索引擎和传统搜索引擎的区别

    关于元搜索引擎的研究与分析在数字化营销的深水区,元搜索引擎(Meta Search Engines)不再仅仅是信息的聚合器,而是流量分发与用户意图精准匹配的核心枢纽,对于服务器提供商及独立开发者而言,理解元搜索引擎背后的算法逻辑、数据抓取机制以及SEO优化策略,是构建高权重网站、提升自然搜索排名的关键,本文将深……

    2026年6月2日
    3700
  • 联想万全r350服务器无法开机如何解决,怎么办

    联想万全r350服务器无法开机,通常由电源、主板或内存故障引起,通过电源灯、报警声和最小化配置法可快速定位问题,联想万全r350服务器无法开机的原因排查很多机房管理员遇到服务器点不亮,往往会先从电源入手,确实,电源模块是服务器容易出故障的部件,尤其是运行多年的机器,联想万全r350服务器普遍采用冗余电源,但长期……

    2026年8月6日
    1200
  • JS替换星号和替换Deployment怎么做,步骤有哪些?

    在JavaScript中,替换星号()为下划线(_)最直接的方法是使用replace()方法配合正则表达式,’string’.replace(/\/g, ‘_’);而在替换Deployment字符串时,同样利用正则全局匹配,但需注意转义和字符串边界,js替换星号的常用方法使用replace()替换单个星号Jav……

    2026年8月1日
    500
  • 南京哪里能租到性价比高的大带宽服务器?,哪家好?

    在南京,租到性价比高的大带宽服务器,首选江宁开发区或软件大道附近的本地IDC服务商,通过BGP多线接入并对比带宽单价,月租成本能控制在市场平均线以下,南京大带宽服务器租赁性价比对比:本地机房 vs 民营服务商带宽成本与性价比的平衡点大带宽服务器的核心开销在于带宽单价,南京本地的机房主要分为电信、移动、联通三大运……

    2026年8月13日
    500
  • AIoT管叔是谁?AIoT管叔个人简介介绍

    AIoT管叔作为智能物联网领域的深度实践者与观察者,其核心价值在于打通了技术落地与商业变现的“最后一公里”,为企业提供了一套从设备智能化到数据资产化的全链路解决方案,在万物互联向万物智联转型的关键周期,单纯的技术堆砌已无法构建竞争壁垒,唯有通过场景化落地与生态化协同,才能真正释放AIoT的产业红利,AIoT产业……

    2026年3月15日
    11400

发表回复

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