Python中使用MySQL模糊查询的方法

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: (1)同样需要将your_username、your_password、your_database替换为我们的MySQL数据库的实际用户名、密码和数据库名。(2)在mysql.connector.connect()中,我们没有直接指定字符集和游标类型,因为mysql-connector-python的默认配置通常已经足够好。但是,如果需要,我们可以添加这些配置选项。(3)使用cursor.close()和cnx.close()来确保游标和连接都被正确关闭。(4)mysql-connector-python也支持使用上下文管理器(即with语句)来自动管理游标和连接的关闭,但这需要创建一个

1.方法一:使用pymysql库的方法

当在Python中使用MySQL进行模糊查询时,我们通常会使用pymysqlmysql-connector-python这样的库来连接MySQL数据库并执行查询。以下是一个使用pymysql进行模糊查询的详细示例,包括安装库、连接数据库、执行查询以及处理结果。

1.1 安装pymysql库

首先,确保我们已经安装了pymysql库。如果没有,可以通过pip来安装:

bash复制代码
pip install pymysql

1.2 编写Python代码进行模糊查询

import pymysql  
  
# 数据库连接配置  
config = {  
    'host': 'localhost',  
    'user': 'your_username',  
    'password': 'your_password',  
    'database': 'your_database',  
    'charset': 'utf8mb4',  
    'cursorclass': pymysql.cursors.DictCursor  
}  
  
# 连接数据库  
connection = pymysql.connect(**config)  
  
try:  
    with connection.cursor() as cursor:  
        # 编写SQL查询语句,使用LIKE进行模糊查询  
        # 假设我们有一个名为"articles"的表,其中有一个"content"字段,我们想要查询包含"Python"关键字的文章  
        sql = "SELECT * FROM articles WHERE content LIKE %s"  
        # LIKE查询中,%是通配符,代表任意数量的字符(包括零个字符)  
        # 我们需要为%s提供一个包含%的字符串来构建LIKE查询  
        search_term = '%Python%'  
        cursor.execute(sql, (search_term,))  
  
        # 获取所有查询结果  
        results = cursor.fetchall()  
  
        # 处理查询结果  
        for row in results:  
            # row是一个字典,其中包含了查询结果的每一列及其对应的值  
            print(f"ID: {row['id']}, Title: {row['title']}, Content: {row['content'][:50]}...")  # 只打印内容的前50个字符作为示例  
  
finally:  
    # 关闭数据库连接  
    connection.close()

1.3 注意事项

(1)请将your_usernameyour_passwordyour_database替换为我们的MySQL数据库的实际用户名、密码和数据库名。

(2)在上面的示例中,我们使用了%作为通配符来构建LIKE查询。%Python%将匹配任何包含"Python"的字符串,不论其前后是否有其他字符。如果我们只想匹配以"Python"开头的字符串,可以使用Python%;只想匹配以"Python"结尾的字符串,可以使用%Python

(3)在执行查询时,我们使用了一个元组(search_term,)来传递参数给cursor.execute()方法。注意这个元组只有一个元素,但也需要逗号来标识它是一个元组,而不是一个括号内的普通表达式。

(4)fetchall()方法用于获取查询结果的所有行。如果我们只需要获取部分结果,可以使用fetchone()fetchmany(size)方法。

(5)在处理完数据库操作后,确保关闭数据库连接以释放资源。在这个示例中,我们使用了一个try...finally块来确保即使在发生异常时也能关闭连接。

2.方法二:使用mysql-connector-python库的方法

除了使用pymysql库进行MySQL的模糊查询之外,还可以使用mysql-connector-python库,这是MySQL官方提供的Python连接器。以下是使用mysql-connector-python进行模糊查询的示例代码:

2.1 安装mysql-connector-python库库

如果还没有安装mysql-connector-python,可以通过pip来安装:

bash复制代码
pip install mysql-connector-python

2.2 编写Python代码进行模糊查询

import mysql.connector  
  
# 数据库连接配置  
config = {  
    'host': 'localhost',  
    'user': 'your_username',  
    'password': 'your_password',  
    'database': 'your_database'  
}  
  
# 连接数据库  
cnx = mysql.connector.connect(**config)  
  
try:  
    cursor = cnx.cursor(dictionary=True)  # 使用字典游标以便获取结果作为字典  
  
    # 编写SQL查询语句,使用LIKE进行模糊查询  
    # 假设我们有一个名为"articles"的表,其中有一个"content"字段,我们想要查询包含"Python"关键字的文章  
    query = ("SELECT * FROM articles WHERE content LIKE %s")  
    search_term = '%Python%'  # LIKE查询中,%是通配符  
  
    # 注意:mysql-connector-python中的参数化查询需要确保%是查询字符串的一部分  
    # 因此我们直接构造完整的LIKE表达式字符串  
    cursor.execute(query, (search_term,))  
  
    # 获取所有查询结果  
    results = cursor.fetchall()  
  
    # 处理查询结果  
    for row in results:  
        print(f"ID: {row['id']}, Title: {row['title']}, Content: {row['content'][:50]}...")  # 只打印内容的前50个字符作为示例  
  
finally:  
    # 关闭游标和连接  
    if cursor:  
        cursor.close()  
    if cnx.is_connected():  
        cnx.close()

2.3 注意事项

(1)同样需要将your_usernameyour_passwordyour_database替换为我们的MySQL数据库的实际用户名、密码和数据库名。

(2)在mysql.connector.connect()中,我们没有直接指定字符集和游标类型,因为mysql-connector-python的默认配置通常已经足够好。但是,如果需要,我们可以添加这些配置选项。

(3)使用cursor.close()cnx.close()来确保游标和连接都被正确关闭。

(4)mysql-connector-python也支持使用上下文管理器(即with语句)来自动管理游标和连接的关闭,但这需要创建一个新的游标类或使用特定的上下文管理器。在上面的示例中,我们手动关闭了它们以展示基本的资源管理。

(5)在处理数据库查询时,务必注意SQL注入的风险。通过使用参数化查询(如上例所示),我们可以确保用户输入被正确地转义,从而防止SQL注入攻击。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2天前
|
机器学习/深度学习 TensorFlow 算法框架/工具
使用Python实现深度学习模型:策略梯度方法
使用Python实现深度学习模型:策略梯度方法
4 0
|
3天前
|
数据可视化 Python
详尽分享用Python进行时间序列预测的7种方法
详尽分享用Python进行时间序列预测的7种方法
|
3天前
|
SQL 关系型数据库 MySQL
技术笔记:python连接mysql数据库
技术笔记:python连接mysql数据库
|
3天前
|
Web App开发 JSON 程序员
老程序员分享:Python有哪些好用的语言翻译方法
老程序员分享:Python有哪些好用的语言翻译方法
|
3天前
|
SQL 关系型数据库 MySQL
老程序员分享:MySQL性能调优的方法
老程序员分享:MySQL性能调优的方法
|
8天前
|
机器学习/深度学习 人工智能 前端开发
Python中的模块化编程
【6月更文挑战第17天】Python模块化编程与软件架构设计的关键在于拆分任务到独立模块,提高代码的可维护性、可重用性和可扩展性。例如,学生管理系统可分解为录入、查询和删除模块。MVC和MVVM架构模式有助于组织代码,而微服务和函数式编程将在未来发展中扮演重要角色。通过示例代码,读者能学习如何实现这些概念,提升项目开发效率和质量。
155 57
|
15天前
|
测试技术 虚拟化 云计算
GitHub高赞!速通Python编程基础手册,被玩出花了!
随着云时代的来临,Python 语言越来越被程序开发人员喜欢和使用,因为其不仅简单易学,而且还有丰富的第三方程序库和相应完善的管理工具。 从命令行脚本程序到 GUI程序,从图形技术到科学计算,从软件开发到自动化测试,从云计算到虚拟化,所有这些领域都有 Python 的身影。 今天给小伙伴们分享的这份手册采用以任务为导向的编写模式,全面地介绍了 Python 编程基础及其相关知识的应用,讲解了如何利用 Python 的知识解决部分实际问题。
GitHub高赞!速通Python编程基础手册,被玩出花了!
|
4天前
|
数据挖掘 数据处理 Python
Python编程入门:从基础到实践
【6月更文挑战第26天】这篇文章引导读者逐步学习Python编程,从基础语法如变量、数据类型(整数、浮点数、字符串)到条件语句、循环(if/for/while),再到函数定义和模块导入。通过实例展示了Python在文本处理、数据分析(使用pandas)和Web开发(使用Flask)的应用。学习Python能为初学者开启更广阔的技术领域,如面向对象编程、并发和网络编程等。
|
2天前
|
设计模式 程序员 测试技术
老程序员分享:Python数据模型及Pythonic编程
老程序员分享:Python数据模型及Pythonic编程
12 1
|
6天前
|
Python
Python多进程编程详细剖析
Python多进程编程详细剖析
14 3