浅学pymysql

2024-03-08 03:28
文章标签 浅学 pymysql

本文主要是介绍浅学pymysql,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

pymysql

连接到MySQL数据库

使用pymysql.connect()函数连接到MySQL数据库服务器。你需要提供数据库的一些连接参数,如主机名、端口、用户名、密码和数据库名。

import pymysqlconn = pymysql.connect(host='localhost',user='your_username',password='your_password',database='your_database'
)

创建游标

游标(Cursor)对象在数据库编程中扮演着至关重要的角色,它是用于执行SQL语句并管理从数据库中获取的数据的主要接口。在pymysql库中,游标对象支持多种操作,包括执行SQL命令、迭代结果集、获取结果等。以下是游标对象的一些主要操作:

在执行任何SQL操作之前,首先需要从连接对象中创建一个游标对象:

cursor = conn.cursor()

pymysql还允许你指定游标的类型,例如,使用pymysql.cursors.DictCursor可以使得结果以字典形式返回,而不是默认的元组形式。

cursor = conn.cursor(pymysql.cursors.DictCursor)

使用参数化查询

为了避免SQL注入,建议使用参数化查询。这意味着在SQL语句中使用占位符(%s),然后提供一个元组作为execute()方法的第二个参数,其中包含了要插入到SQL语句中的实际值。

sql = "INSERT INTO your_table (column1, column2) VALUES (%s, %s)"
cursor.execute(sql, ('value1', 'value2'))

执行SQL语句

游标对象的execute()方法用于执行单条SQL语句。它接受一个SQL语句字符串作为参数,并可以选择接受一个参数元组或字典作为SQL语句的参数,也可以使用游标对象的execute()方法执行SQL语句,比如SELECT, INSERT, UPDATE, DELETE等。

cursor.execute("SELECT * FROM table_name WHERE column_name = %s", (value,))
# 执行SQL查询
cursor.execute('SELECT * FROM your_table')# 获取查询结果
results = cursor.fetchall()
for row in results:print(row)# 插入数据
sql = "INSERT INTO your_table (column1, column2) VALUES (%s, %s)"
cursor.execute(sql, ('value1', 'value2'))# 提交事务以保存更改
conn.commit()

批量执行SQL语句

executemany()方法用于执行相同的SQL语句多次,每次使用不同的参数。这对于批量插入数据非常有用。

sql = "INSERT INTO table_name (column1, column2) VALUES (%s, %s)"
values = [('value1_1', 'value2_1'), ('value1_2', 'value2_2')]
cursor.executemany(sql, values)
#execute+many,执行多次,把元组遍历完

滚动

scroll()方法用于移动游标到结果集中的指定位置。它接受一个值作为参数,指定要滚动的行数,和一个模式mode(默认为relative,相对当前位置移动;absolute表示从结果集的开始处移动)。

cursor.scroll(1, mode='relative')  # 向前移动一行
cursor.scroll(-1, mode='relative') # 向后移动一行
cursor.scroll(0, mode='absolute')  # 移动到结果集的开始

关闭游标

完成操作后,应关闭游标以释放数据库资源。

cursor.close()

这些操作概述了pymysql中游标对象的主要用法,使得执行SQL语句、处理SQL查询结果、批量操作数据和滚动通过结果集变得简单。

connect.commit()

对于DDL语句(如CREATE, ALTER, DROP等)

  • DDL(Data Definition Language)语句:这类语句用于定义和修改数据库结构,如创建、修改、删除表和数据库。对于DDL语句,MySQL服务器会自动提交这些操作。换句话说,当你执行一个DDL语句(如创建表)时,该操作立即生效,不需要显式调用commit()来提交事务。

对于DML语句(如INSERT, UPDATE, DELETE等)

  • DML(Data Manipulation Language)语句:这类语句用于数据库记录的增加、修改、删除等操作。如果你的操作包含DML语句,并且你想要这些更改持久化到数据库中,那么在这种情况下需要调用connect.commit()来提交事务。如果在执行DML操作后没有调用commit(),那么这些更改在数据库层面上不会被保存,如果连接关闭或者出现其他一些情况,这些未提交的更改可能会丢失。

自动提交

  • 自动提交模式:某些数据库配置或连接设置可能默认为自动提交模式。在自动提交模式下,每个DML语句执行后都会自动提交。但是,默认情况下,pymysql连接是不开启自动提交的。如果你想开启自动提交,可以在建立连接后设置connect.autocommit(True)

结论

对于你的情况,由于你只执行了CREATE DATABASECREATE TABLE这类DDL语句,实际上是不需要调用connect.commit()的,因为这些操作会被MySQL自动提交。然而,保留connect.commit()在你的代码中并不会引发错误,只是在此场景下它是多余的。如果未来你的脚本包含了DML操作,确保适时调用connect.commit()来提交这些更改。

当然,pymysql是一个Python库,它用于连接MySQL数据库服务器,执行SQL语句并管理数据库中的数据。这个库提供了一种方便的方式来使用Python操作MySQL数据库。以下是pymysql的一些基本用法,包括连接数据库、执行SQL命令、处理查询结果等。

处理查询结果

  • cursor.fetchone(): 获取查询结果的下一行。
  • cursor.fetchall(): 获取查询结果中的所有行。
  • cursor.fetchmany(size): 获取查询结果中的size行。

关闭游标和连接

操作完成后,应该关闭游标和连接。

cursor.close()
conn.close()

关闭游标(Cursor)是数据库操作的一个重要环节,主要基于以下几个原因:

  1. 资源管理:在数据库系统中,游标是一种占用服务器资源的对象。每个游标在使用后都会占用一定的内存和数据库连接资源。如果不及时释放这些资源,随着游标数量的增加,会消耗更多的数据库资源,进而影响数据库服务器的性能。

  2. 防止内存泄露:在许多数据库接口中,游标对象在使用完毕后不会自动回收其占用的资源。长时间或频繁地使用游标而不关闭,会导致内存泄露,这在长时间运行的应用中尤为严重。

  3. 维持数据库连接的健康:打开的游标关联着数据库连接。如果游标未关闭,相关的数据库连接可能也会保持在打开状态,限制了连接池中可用连接的数量。及时关闭游标有助于确保连接池中的连接可以被有效管理和重用。

  4. 事务控制:在某些数据库系统中,未关闭的游标可能会持有锁或其他事务资源,这可能会导致事务持续时间过长,增加死锁的风险,以及影响数据库的并发性能。

  5. 遵循最佳实践:关闭游标是良好的编程实践的一部分,这有助于编写出更加清晰、可维护和高效的数据库应用程序。它使代码更加稳定,减少因资源泄露导致的问题,提高了应用程序的可靠性。

因此,为了优化资源使用、提高应用性能和避免潜在的问题,开发人员在使用完游标后应该总是确保及时关闭它。这通常是通过在代码中显式调用游标的close()方法来实现的,最好在finally块中或使用Python的with语句上下文管理器来保证,无论操作成功还是遇到异常,游标都能被正确关闭。

错误处理

在执行数据库操作时,可能会遇到各种错误,例如语法错误、连接错误等。使用try...except语句来处理这些潜在的错误是一个好习惯。

在数据库中使用错误处理很重要

try:cursor.execute(sql)conn.commit()
except pymysql.Error as e:print(f"Database error: {e}")conn.rollback()  #最好加一个rollback
finally:cursor.close()conn.close()

这些是pymysql的一些基本用法,涵盖了连接数据库、执行SQL命令、处理结果和错误处理等方面。正确使用这些基本功能,可以帮助你高效地在Python程序中操作MySQL数据库。

这篇关于浅学pymysql的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/785830

相关文章

pymysql.err.OperationalError: (5000, ‘sql decompose ret[-1] error‘)问题

分布式数据库 sql语句写对没?! 注意是以什么字段分表的,where后面必须要有

驾驭Python与MySQL的桥梁:pymysql的神秘面纱

文章目录 **驾驭Python与MySQL的桥梁:pymysql的神秘面纱**背景:为何选择pymysql?库的简介安装指南简单的库函数使用方法场景应用常见问题与解决方案总结 驾驭Python与MySQL的桥梁:pymysql的神秘面纱 背景:为何选择pymysql? 在数据驱动的现代世界中,数据库是存储和检索信息的核心。Python,以其简洁和强大的特性,成为了数据

python基础-pymysql

安装模块基础用法%占位符封装sql语句传递参数形式增、删、改 增加数据库数据删除数据库数据修改数据库数据查询 批量操作获取插入的数据id链接池加锁 安装模块 pip install pymysql 或者如下的方式 基础用法 创建数据库如下: CREATE TABLE `test` (`id` int(11) NOT NULL AUTO_INCREMENT,

Python高手进阶:pymysql vs mysql-connector-python,哪种方式连接MySQL更胜一筹

在Python中连接MySQL数据库,pymysql和mysql-connector-python都是常用的选择,但它们的应用场景和流行程度有所不同。 pymysql pymysql是一个纯Python实现的MySQL驱动库,它提供了一个简单的接口来与MySQL数据库交互。它的优势在于它是纯Python实现的,不需要额外安装MySQL的C语言客户端库。这意味着在一些环境中更容易部署,例如某些类

12.爬虫---PyMysql安装与使用

12.PyMysql安装与使用 1.安装 PyMySQL2.使用PyMySQL2.1创建数据表2.2连接数据库2.3增加数据2.4修改数据2.5查询数据2.6删除数据2.7关闭连接 3.总结 1.安装 PyMySQL PyMySQL是Python中用于连接MySQL数据库的库,安装起来非常简单。通常情况下,只需要在命令行中执行以下命令即可: pip install pymys

【自动驾驶】浅学一下BEV目标检测记录

现在BEV与OCC占用网络非常火,在日常工作中,如果没有接触到,可能会忽略相应的知识储备。本人还未看大量文献,所以只能算浅学下记录,这里主要从互联网上学习到的,还是就是跟专业的同事请教之后,自己总结的。 1.BEV视角 BEV视觉其实是全局俯视图,更好的得到其他障碍物到自车的横纵向距离。在2D检测的时候,对于深度(其他障碍物离自车的纵向距离)估计不是很准。 2.BEV数据标签

python3 操作mysql报错pymysql.err.OperationalError: (2003, Can't connect to MySQL server on 'localhost'

1. python代码 #!/usr/bin/python3import pymysql# 打开数据库连接db = pymysql.connect("localhost","testuser","test123","TESTDB" )# 使用 cursor() 方法创建一个游标对象 cursorcursor = db.cursor()# 使用 execute() 方法执行 SQL 查询

pymysql防止SQL注入

防止SQL注入 SQL注入:用户提交带有恶意的数据与SQL语句进行字符串方式的拼接,从而影响了SQL语句的语义,最终产生了数据泄露的现象 如何防止: SQL语句参数化: SQL语言中的参数使用%s来占位,此处不是python中的字符串格式化操作 将SQL语句中%s展位所需要的参数存在一个列表中,把参数列表传递给execute方法中第二个参数 多参数:

MySQL从入门到高级 --- 15.优化 16.pymysql

文章目录 第十五章 && 第十六章:15.优化15.1 查询SQL执行效率15.2 定位低效率执行SQL15.3 explain分析执行计划 - 基本使用15.4 explain分析执行计划 - id15.5 explain分析执行计划 - select_type15.6 explain分析执行计划 - type15.7 explain分析执行计划 -其他指标字段15.8 show prof

linux下安装MySQL以及用pymysql连接数据库

安装MySQL以及pymysql MySQL数据库连接错误MySQL的安装第一次安装失败安装成功安装后启动 先来说说自己犯傻的过程,因为一个示例程序中用到了pymysql模块,很简单,python中pip一下,直接就安装,了解到这是一个连接数据的python依赖库,鄙人以为安装好这个应该就可以用数据库了,这之前应该是自己没带脑子了。 首先,你自己要有一个MySQL数据库,然后