起步
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""pymysql中使用存储过程
"""
import pymysql
conn = pymysql.connect(
user='root',
password='',
host='localhost',
port=3306,
database='hardy2_db',
charset='utf8mb4'
)
# cursors = conn.cursor(cursor=pymysql.cursors.DictCursor)
cursors = conn.cursor(cursor=None)
存储过程
cursor.callproc()
无参调用
-
无参的时候,不管游标类型,都是一个空元组
-
有参的时候,是一个有值的元组或者列表(看是用什么包裹传递的参数)
res = cursors.callproc(procname='p1')
print(res)
# 关于返回,目前实验来看,只会返回存储过程遇到的第一个select语句的结果。
print(cursors.fetchall())
print(cursors.fetchall()) # 空
print(cursors.fetchall()) # 好像没有commit也成功修改了,并且后面的select并不会返回
print(cursors.fetchall())
有参调用
# args必须为可迭代结构
rows = cursors.callproc(procname='p1', args=[4, 5])
# 如果args是(4, 5),就返回(4, 5);如果是[4, 5],就返回[4, 5]
rows = cursors.callproc(procname='p2', args=(4, ))
print(rows)
print(cursors.fetchall())
获取返回结果
cursors.execute(query='select @_p1_0, @_p1_1, @_p1_2;') # python还可以拿in的值
- 访问一个不存在的存储过程报错
- 访问一个不存在的参数,那个变量返回None
print(cursors.fetchall()) # DictCursor: [{'@_p2_0': 1, '@_p2_1': 101, '@_p2_2': None}]
示例代码
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""pymysql中使用存储过程
"""
import pymysql
conn = pymysql.connect(
user='root',
password='',
host='localhost',
port=3306,
database='hardy2_db',
charset='utf8mb4'
)
# cursors = conn.cursor(cursor=pymysql.cursors.DictCursor)
cursors = conn.cursor(cursor=None)
# 无参调用:
# ======================================
# 无参的时候,不管游标类型,都是一个空元组
# 有参的时候,是一个有值的元组或者列表(看是用什么包裹传递的参数)
# ======================================
# res = cursors.callproc(procname='p1')
# print(res)
#
# 关于返回,目前实验来看,只会返回存储过程遇到的第一个select语句的结果。
# print(cursors.fetchall())
# print(cursors.fetchall()) # 空
#
# print(cursors.fetchall()) # 好像没有commit也成功修改了,并且后面的select并不会返回
# print(cursors.fetchall())
# 有参调用1:
# args必须为可迭代结构
# rows = cursors.callproc(procname='p1', args=[4, 5])
# 如果args是(4, 5),就返回(4, 5);如果是[4, 5],就返回[4, 5]
# rows = cursors.callproc(procname='p2', args=(4, ))
# print(rows)
# print(cursors.fetchall())
# 有参调用2:
# rows = cursors.callproc('p2', (1, 5))
rows = cursors.callproc(procname='p1', args=[1, 5])
cursors.execute(query='select @_p1_0, @_p1_1, @_p1_2;') # python还可以拿in的值
# 访问一个不存在的存储过程报错
# 访问一个不存在的参数,那个变量返回None
print(cursors.fetchall()) # DictCursor: [{'@_p2_0': 1, '@_p2_1': 101, '@_p2_2': None}]
# ((1, 101, None),)
cursors.close()
conn.close()