0%

pymysql的使用

安装

1
pip3 install pymysql -i http://pypi.douban.com/simple

使用

1. 执行sql

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import pymysql

#创建连接
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', charset='utf8', db='db1')

#创建游标
cursor = conn.cursor()
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 结果以字典形式返回

#执行sql并返回受影响的行数
r = cursor.execute("'update t1 set name='John' where id=5")

#执行sql并返回受影响的行数(防止sql注入)
r = cursor.execute("'update t1 set name='John' where id=%s", (5,))

#执行sql并返回受影响的行数,插入多条
r = cursor.executemany("insert into t1(name) values(%s)", ('张三','李四','王五'))

#提交,不然无法保存新建或者修改的数据
conn.commit()

#关闭游标
cursor.close()

#关闭连接
conn.close()

2. 获取新创建数据的自增ID

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import pymysql
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', charset='utf8', db='db1')

cursor = conn.cursor()

cursor.execute('insert into t1(name) values (%s)', ('鲤鱼',))

print('***',cursor.lastrowid) #获取上一条记录的rowid
cursor.executemany('insert into t1(name) values(%s)', ('测试', '系统', '运维'))

newid = cursor.lastrowid #获取批量插入数据中的第一个记录的rowid
print('****', newid)

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

3. 获取查询数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import pymysql
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', charset='utf8', db='db1')

cursor = conn.cursor()

cursor.execute('select * from t1')

#获取一行数据
r1 = cursor.fetchone()
print(r1) #(2, '测试')

#获取n行数据
r2 = cursor.fetchmany(3)
print(r2) #((6, '测试'), (10, '测试'), (3, '系统'))

#获取所有数据
r3 = cursor.fetchall()
print(r3)

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

注:在fetch数据时按照顺序进行,可以使用cursor.scroll(num,mode)来移动游标位置,如:

  • cursor.scroll(1,mode=’relative’) # 相对当前位置移动1行
  • cursor.scroll(2,mode=’absolute’) # 相对绝对位置移动2行

4. fetch数据类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import pymysql

conn = pymysql.connect(host='172.16.100.153', user='root', password='qingdao@123QWE', charset='utf8', db='db2')

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

cursor.execute('select * from t1')
r1 = cursor.fetchone()
print(r1) # {'id': 6, 'name': '测试'} 字典形式


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

5. 执行存储过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import pymysql

conn = pymysql.connect(host='172.16.100.153', user='root', password='qingdao@123QWE', db='db2')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 调用存储过程
cursor.callproc('p5', (1,))
# 获取结果集
ret = cursor.fetchall()

# 获取返回值
cursor.execute('select @_p5_0')
result = cursor.fetchall()

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

print(ret)
print(result)