一 pymysql:
pymysql是python中的数据库模块.在py2中可以使用pymysql也可以使用mysqldb在py3中使用pymysql
二 pymysql的操作:
顺序:
1 创建链接
2 获取游标
3 执行sql
4 查询结果
5 其他
1 基本操作:
基本操作 创建链接 游标 执行sql 获取查询结果
import pymysql
#
# conn=pymysql.connect(host='127.0.0.1',
# user='root',
# password='111111111',
# port=3306,database='db5'
# )
# cursor=conn.cursor()
#当然也可以不用在execute内传参,直接在sql上拼接,但是可能会导致sql注入的问题
# sql='select * from userinfo where username=%s and password=%s'
# cursor.execute(sql,['yuan','123456'])
# result=cursor.fetchone() #仅仅拿第一条数据
# result1=cursor.fetchmany(4) #指定拿几条数据
# result2=cursor.fetchall() #拿所有的数据
# print(result)
#返回结果默认是一个元组(1, 'yuan', '123456')
#pymysql可以指定返回的数据类型 分别可以在链接和获取游标处修改一个key的值
# conn=pymysql.connect(host='127.0.0.1',
# user='root',
# password='1111111',
# port=3306,database='db5'
# cursorclass=pymysql.cursors.DictCursor
# )
#或则 在获取有标的时候修改
# cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)
# sql='select * from userinfo where username=%s and password=%s'
#执行sql 这里也可以写成q=cursor.execute(sql),q是收影响的行数
#当然 execute可以接受args execute(sql,args) args应可迭代类型
# cursor.execute(sql)
# result=cursor.fetchone()
# cursor.close()
# conn.close()
# print(result)
#获取有标的另外一种写法 在with执行完毕后 自动关闭游标
# with conn.cursor()as cursor:
# sql='select * from info'
# cursor.execute(sql)
# result=cursor.fetchone()
# conn.close()
# 移动游标 cursor.scroll(num,mode)
# cursor.scroll(1,mode='relative') #相对当前位置移动
# cursor.scroll(1,mode='absolute') #相对绝对位置移动
2 pymysql的增删改查 操作 实际上分为2类,select不需要commit 但是insert update delete都需要commit
# insert 单条操作
# conn=pymysql.connect(host='127.0.0.1',
# user='root',
# password='1111111',
# port=3306,database='db5')
# cursor=conn.cursor()
# sql = 'insert into userinfo (username,password) values (%s,%s);'
# name = 'aoteman'
# pwd = '123456789'
# cursor.execute(sql, [name, pwd])
# conn.commit()
# cursor.close()
# conn.close()
# insert 多条操作
# conn=pymysql.connect(host='127.0.0.1',
# user='root',
# password='1111111',
# port=3306,database='db5')
# cursor=conn.cursor()
# sql = 'insert into userinfo (username,password) values (%s,%s)'
# data = [
# ('xxoo', '789'),
# ('ooxx', '456'),
# ('xoxo', '123')
# ]
# # executemany方法 执行多条
# cursor.executemany(sql, data)
# conn.commit()
# cursor.close()
# conn.close()
#获取最后一条新增数据的自增id,lastrowid 但是如果在使用lastrowid之前没有insert则回报错
#last_id=cursor.lastrowid()
#delete操作
# conn=pymysql.connect(host='127.0.0.1',
# user='root',
# password='1111111',
# port=3306,database='db5')
# cursor=conn.cursor()
# sql = "delete from userinfo where username=%s;"
#
# cursor.execute(sql,'yuan')
# conn.commit()
# cursor.close()
# conn.close()
#update操作
# conn=pymysql.connect(host='127.0.0.1',
# user='root',
# password='1111111',
# port=3306,database='db5')
# cursor=conn.cursor()
# sql = "update userinfo set pwd=%s where username=%s;"
# cursor.execute(sql,'xu','22222')
# conn.commit()
# cursor.close()
# conn.close()
3 pymysql支持回滚 rollback():
# conn=pymysql.connect(host='127.0.0.1',
# user='root',
# password='1111111',
# port=3306,database='db5')
# cursor=conn.cursor()
# sql1 = "insert into userinfo (username, pwd) values (%s, %s);"
# sql2 = "insert into hobby (id, hobby) values (%s,%s);"
# user = "xxx"
# pwd = "ooo"
# id = "你妹" # 表中 id int
# hobby = "散步"
# try:
# cursor.execute(sql1, [user, pwd])
# print(sql1)
# cursor.execute(sql2, [id, hobby])
# conn.commit()
# except Exception as e:
# print(str(e))
# # 出现报错回滚
# conn.rollback()
# cursor.close()
# conn.close()