pymysql
需要安装pymysql模块才能在python中使用MySQL
安装
pip3 install pymysql
若安装失败,需要升级pip版本
python -m pip install --upgrade pip
使用
1.执行mysql
1 import pymysql 2 3 # 创建连接 4 conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1') 5 # 创建游标 6 cursor = conn.cursor() 7 8 # 执行SQL,并返回收影响行数 effect_row可打印 9 effect_row = cursor.execute("update hosts set host = '1.1.1.2'") 10 11 # 执行SQL,并返回受影响行数 12 # effect_row = cursor.execute("update hosts set host = '1.1.1.2' where nid > %s", (1,)) 13 14 # 执行SQL,并返回受影响行数 15 # effect_row = cursor.executemany("insert into hosts(host,color_id)values(%s,%s)", [("1.1.1.11",1),("1.1.1.11",2)]) 16 17 18 # 提交,不然无法保存新建或者修改的数据 19 conn.commit() 20 21 # 关闭游标 22 cursor.close() 23 # 关闭连接 24 conn.close()
2.获取新创建数据自增ID
增加多条数据用 executemany() 传的数据应为列表/元组中的元组,如[(),(),()]
自增ID: cursor.lastrowid
1 import pymysql 2 3 conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1') 4 cursor = conn.cursor() 5 cursor.executemany("insert into hosts(host,color_id)values(%s,%s)", [("1.1.1.11",1),("1.1.1.11",2)]) 6 conn.commit() 7 cursor.close() 8 conn.close() 9 10 # 获取最新自增ID 11 new_id = cursor.lastrowid
3.获取查询数据
fetchall ((一条数据),) fetchone 一条数据
1 import pymysql 2 3 conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1') 4 cursor = conn.cursor() 5 cursor.execute("select * from hosts") 6 7 # 获取第一行数据 8 row_1 = cursor.fetchone() 9 10 # 获取前n行数据 11 # row_2 = cursor.fetchmany(3) 12 # 获取所有数据 13 # row_3 = cursor.fetchall() 14 15 conn.commit() 16 cursor.close() 17 conn.close()
注意:在fetch数据时按照顺序进行,可以使用cursor.scroll(num, mode)来移动游标位置
- cursor.scroll(1,mode='relative') # 相对当前位置移动
- cursor.scroll(2,mode='absolute') # 相对绝对位置移动
4. fench数据类型
默认获取的数据是元组类型,要想字典类型则要把游标设置为字典类型
1 import pymysql 2 3 conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1') 4 5 # 游标设置为字典类型 6 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) 7 r = cursor.execute("call p1()") 8 9 result = cursor.fetchone() 10 11 conn.commit() 12 cursor.close() 13 conn.close()
注意事项:字符串拼接,不应使用%进行字符串拼接;应该进行参数的传递
1 import pymysql 2 3 conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', db='example', charset='utf8') 4 cursor = conn.cursor() 5 # 字符串拼接,禁止使用,容易造成sql注入 如输入: 'name' or 1 = 1 --; 即可不用密码获得信息 6 # inp = input("请输入班级:") 7 # sql = 'insert into class(caption) VALUES("%s")' 8 # sql = sql % (inp,) 9 10 inp = input("请输入班级:") 11 a = cursor.execute('insert into class(caption) VALUES(%s)', inp) 12 13 conn.commit() 14 cursor.close() 15 conn.close()