python中pymysql操作mysql

使用python操作mysql

使用python操作mysql,一般使用模块pymysql
终端执行下代码下载pymysql模块

pip install pymysql

对于pymysql模块的使用比较简单易学,主要存在几个关键函数,掌握就与此模块并无其他关联,主要是SQL语句的编写。
我的数据库存在这么一组数据

sid student_id course_id number
4 2 3 87
8 3 3 48
12 1 2 48
13 1 3 59
14 2 1 98
15 3 1 68

下面看代码:

import pymysql

# 创建连接 固定格式,需要连接数据库的所有信息
conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='9999',db='gao')
# 创建游标 何为游标?就是一个准备对数据库进行你想要的操作的对象
cursor = conn.cursor()

# 此处为重点,对于指定表中一个字段进行处理时,前面是处理的SQL语句,后面跟一个参数即可
r=cursor.execute('insert into score(number) values(%s,%s,%s)',69)
# 对于同一个表中多个字段进行处理时,前面SQL语句任相同,后面的传入参数使用元组以此填充
r=cursor.execute('insert into score(student_id,course_id,number) values(%s,%s,%s)',(1,2,69))
# 1次对于同一个表中多个字段进行多次处理时,前面SQL语句任相同,后面的传入参数使用元组包裹元组或列表包裹元组以此填充 等同于SQL语句中的values(),(),()
# 注意 多次处理使用的函数不同于单次 多次处理使用executemany,单次处理使用execute
l = [
	(1,2,69),
	(1,3,99),
	(2,1,45),
]
r=cursor.executemany('insert into score(student_id,course_id,number) values(%s,%s,%s)',l)

# 返回的值是处理受影响的行数
print(r) # 此处是 1+1+3 5

# 确认提交,没有默认不执行游标进行的操作
conn.commit()
# 关闭游标
cursor.close()
# 关闭数据库连接
conn.close()


上述语句无法获取到查询的内容,故继续看代码:

import pymysql

conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='9999',db='gao')

cursor = conn.cursor()

r=cursor.execute('select * from score')
print(r) # 返回查询内容中的影响到的行数 6

# 以此函数获取到所有返回的内容 返回是元组形式
result = cursor.fetchall()  
print(result) # ((4, 2, 3, 87), (8, 3, 3, 48), (12, 1, 2, 48), (13, 1, 3, 59), (14, 2, 1, 98), (15, 3, 1, 68))

# 以此函数获取到第一条返回的内容 返回是元组形式
# fetchone 相当于一个指针,当重复执行时,会依次往下执行
result = cursor.fetchone() 
print(result) # (4, 2, 3, 87)

# 以此函数获取到第设置值条返回的内容 返回是元组形式
# 注意此处当设置值多与总行数时,不报错,按实际行数返回
result= cursor.fetchmany(7)
print(result) # ((4, 2, 3, 87), (8, 3, 3, 48), (12, 1, 2, 48), (13, 1, 3, 59), (14, 2, 1, 98), (15, 3, 1, 68))


conn.commit()

cursor.close()
conn.close()


上面说到,fetchone 相当于一个指针,当重复执行时,会依次往下执行,故我们是否同样可以对指针位置进行操作:

import pymysql

conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='9999',db='gao')

cursor = conn.cursor()

r=cursor.execute('select * from score')
print(r) # 返回查询内容中的影响到的行数 6

result = cursor.fetchone()
print(result) # (4, 2, 3, 87)
result = cursor.fetchone()
print(result) # (8, 3, 3, 48)
result = cursor.fetchone()
print(result) # (12, 1, 2, 48)
# 依次拿去内容

# 此处改变指针位置
cursor.scroll(0,mode='absolute') # 换到总数据的第0行
result = cursor.fetchone()
print(result) # (4, 2, 3, 87)
result = cursor.fetchone()
print(result) # (8, 3, 3, 48)
# 回到指定位置后,依次拿去内容

# 上位绝对定位方式切换指针 当然存在相对定位方式切换
cursor.scroll(-1,mode='relative') # -1:从现在位置向上一个 1:从现在位置向下一个
result = cursor.fetchone()
print(result) # (8, 3, 3, 48)
result = cursor.fetchone()
print(result) # (12, 1, 2, 48)
result = cursor.fetchone()
print(result) # (13, 1, 3, 59)
# 回到指定位置后,依次拿去内容


conn.commit()
cursor.close()
conn.close()

上述内容中返回的内容均为元组,这样对刚进行数据处理时的人拿到此数据,比较难以对应,故,pymysql也引入了字典形式,同时返回字段名与内容:

import pymysql

conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='9999',db='gao')

# 给游标函数里赋值,改变返回内容的类型
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

r=cursor.execute('select * from score')
print(r) # 返回查询内容中的影响到的行数 6

result = cursor.fetchall()
print(result) # [{'sid': 4, 'student_id': 2, 'course_id': 3, 'number': 87}, {'sid': 8, 'student_id': 3, 'course_id': 3, 'number': 48}, {'sid': 12, 'student_id': 1, 'course_id': 2, 'number': 48}, {'sid': 13, 'student_id': 1, 'course_id': 3, 'number': 59}, {'sid': 14, 'student_id': 2, 'course_id': 1, 'number': 98}, {'sid': 15, 'student_id': 3, 'course_id': 1, 'number': 68}]
# 这里的字段内容(即字典的key值),同样支持SQL语句中的别名,或指定字段内容等功能




conn.commit()
cursor.close()
conn.close()

当执行一次新增数据时,有时表中具有新增字段,但新增字段不用自己创建,如果有需求获取时,是不用再次查询,可以通过pymysql直接获取的:
原数据库内容

tid tanme
1 波多
2 苍空
3 饭岛
4 苍哈
import pymysql

conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='9999',db='gao')

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

r=cursor.execute('insert into teacher(tname) values("饭岛爱")')
print(r) # 1
tid = cursor.lastrowid # 注意 此函数只能获取到最后一次处理的自增id 前面包含多次处理,也只回复最后一次
print(tid) # 5

conn.commit()
cursor.close()
conn.close()

你可能感兴趣的:(python,数据库)