一、python与mysql交互 |
因版本不同python操作mysql有两个模块,python3不再支持MySQL-python,模块使用都一样:
python2.7:MySQL-python
python3:pymysql
安装:
pip install Mysql-python
pip install pymysql
pymysql介绍:
1.执行原生sql语句
#!/usr/bin/env python3 #_*_ coding:utf-8 _*_ #Author:wd import pymysql conn=pymysql.connect(host='10.0.0.241',port=3307,user='stu',passwd='1234qwer',db='student')#创建连接 cursor=conn.cursor()#创建游标 try: #num=cursor.execute("create table student (name CHAR(20),age INT(3),date DAT )")#创建表不需要提交可以生效 num=cursor.execute("insert into student value('wd',22,'1993-05-22')")#执行sql返回受影响的条目数 print(num) conn.commit() #pymysql默认开启了事务,进行数据库更新需要提交 except: conn.rollback()#出现异常则回滚 cursor.close()#关闭游标 conn.close()#关闭连接
2.批量执行sql
实际是循环调用execute
def executemany(self, query, args):
# type: (str, list) -> int
#!/usr/bin/env python3 #_*_ coding:utf-8 _*_ #Author:wd import pymysql conn=pymysql.connect(host='10.0.0.241',port=3307,user='stu',passwd='1234qwer',db='student')#创建连接 cursor=conn.cursor()#创建游标 num=cursor.executemany("insert into student values(%s,%s,%s)",[('jack',22,'1993-01-11'),('tara',18,'1998-03-04')]) #一次性执行操作多条,参数为 print(num)#打印条结果条目 conn.commit() #pymysql默认开启了事务,进行数据库更新需要提交 new_id = cursor.lastrowid#如果是自增id,该方法可以获取到插入完成以后的ID print(new_id) cursor.close()#关闭游标 conn.close()#关闭连接
3.查询操作:fetch
#!/usr/bin/env python3 #_*_ coding:utf-8 _*_ #Author:wd import pymysql conn=pymysql.connect(host='10.0.0.241',port=3307,user='stu',passwd='1234qwer',db='student')#创建连接 cursor=conn.cursor()#创建游标 cursor = conn.cursor() cursor.execute("select * from student") # 获取第一行数据 row_1=cursor.fetchone() print(row_1) # 获取前n行数据 row_2=cursor.fetchmany(3) print(row_2) # 获取所有数据 # row_3=cursor.fetchall() cursor.scroll(0,mode='absolute')#将游标重新移至开始处 row_new=cursor.fetchone() print(row_new) cursor.close()#关闭游标 conn.close()#关闭连接
TIPS:使用fetchone获取数据如同读取文件一样,如果读一行游标会下移一行,
可以使用cursor.scroll(num,mode)来移动游标位置,如:
- cursor.scroll(1,mode='relative') # 相对当前位置移动
- cursor.scroll(2,mode='absolute') # 相对绝对位置移动
4.设置fetch获取数据类型
默认使用fetch查询结果是tuple,我们还可以设置获取的数据返回时dict
#!/usr/bin/env python3 #_*_ coding:utf-8 _*_ #Author:wd import pymysql conn = pymysql.connect(host='10.0.0.241', port=3307, user='stu', passwd='1234qwer', db='student') # 游标设置为字典类型 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)#设置游标类型为字典 r = cursor.execute("select * from student") res = cursor.fetchone() print(res) cursor.close() conn.close() 结果: {'name': 'wd', 'age': 22, 'date': datetime.date(1993, 5, 22)}