Python操作MySQL

本文介绍了如何使用Python的pymysql模块连接和操作MySQL数据库,包括安装pymysql、数据库连接、自动提交的处理、数据的插入、查询、移动游标以及增删改查操作。同时,强调了在进行提交操作时应考虑数据库本身的自动提交设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需要先安装pymysql模块,安装方法pip install pymysql

pymysql在连接数据库的时候会有一个自动提交参数autocommit,一般情况下,oracle数据库本身默认不设置自动提交(或设置自动提交为false),mysql数据库本身默认设置自动提交(或设置自动提交为true)。一般情况下,不管哪种数据库,都可以在代码里不设置自动提交为true或false(不主动connection.setAutoCommit(bool)),可在代码每次主动commit之前,判断该数据库本身是否设置自动提交,若数据库本身已设置自动提交,则无需手动通过代码commit,不然就会报错;若数据库本身未设置自动提交,则需通过代码主动commit,方能使本次数据库操作生效,如下:

conn.commit()

插入表数据:

import pymysql

# 连接数据库
conn = pymysql.connect(host="localhost", user='root', password='root', db='zhifou', port=3306, charset='utf8')  #port及charset尽量加上,utf8不要写成utf-8,mysql的默认端口是3306,默认输出tuple数据

# 利用连接对象获取游标对象
cur = conn.cursor()

# 插入表数据
# cur.execute("insert into type (name, sort) values(%s, %s)", ("测试", "99"))		#插入一条数据
cur.executemany("insert into type (name, sort) values(%s, %s)", (("ceshi1", "100"), ("ceshi2", "101"), ("ceshi3", "102"), ("ceshi4", "103")))	#插入多条数据

查询表数据:

# 查询表数据
cur.execute("select * from type")
lines = cur.fetchall()				#返回所有查询结果
for line in lines:
	print(line)

print(cur.fetchone())				#返回一条查询结果,结果为None,因为游标已经在表的底部了
cur.execute("select * from type")	#必须重新查询
print(cur.fetchone())				#显示第一条记录

data = cur.fetchmany(2)				#返回指定数量的查询结果,注意此处没有重新查询,游标在第一条数据之后
for i in data:						#结果为第2、3条数据
	print(i)

结果为:

(40, '测试', 99)
(41, 'ceshi1', 100)
(42, 'ceshi2', 101)
(43, 'ceshi3', 102)
(44, 'ceshi4', 103)
None
(40, '测试', 99)
(41, 'ceshi1', 100)
(42, 'ceshi2', 101)

移动游标:
relative模式:从当前位置下移一个位置

cur.scroll(1)						#默认mode="relative",游标位置从第三条数据下方移动到第四条数据下方

结果为:

(44, 'ceshi4', 103)

absolute模式:从结果集的第一行下移一个位置

cur.scroll(1, mode="absolute")		
print(cur.fetchone())

结果为:

(41, 'ceshi1', 100)

上移一个位置:

cur.scroll(-1)						#从当前位置(第二条数据下方)上移一个位置(第一条数据下方)
print(cur.fetchone())

结果为:

(41, 'ceshi1', 100)

输出字典型数据:

# 方法一:
conn = pymysql.connect(host="localhost", user='root', password='root', db='zhifou', port=3306, charset='utf8', cursorclass=pymysql.cursors.DictCursor)  		#输出字典型数据,此处用cursorclass
cur = conn.cursor()

# 方法二:
# conn = pymysql.connect(host="localhost", user='root', password='root', db='zhifou', port=3306, charset='utf8')  
# cur = conn.cursor(cursor=pymysql.cursors.DictCursor)		#此处用cursor

cur.execute("select * from type")
lines = cur.fetchall()			
for line in lines:
	print(line)

结果为:

{'id': 40, 'name': '测试', 'sort': 99}
{'id': 41, 'name': 'ceshi1', 'sort': 100}
{'id': 42, 'name': 'ceshi2', 'sort': 101}
{'id': 43, 'name': 'ceshi3', 'sort': 102}

修改表数据:

cur.execute("update type set name=%s where id=40", ("ceshi0"))
cur.scroll(0, mode='absolute')							#返回数据集的第一条数据
print(cur.fetchone())

结果为:

(40, 'ceshi0', 99)

删除表数据:

cur.execute("delete from type where id=41")
cur.execute("delete from type where id>39")

最后记得关闭游标和数据库连接:

cur.close()							#先关闭游标,防止占用资源
conn.close()						#关闭数据库连接
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值