首页 > 技术文章 > pymysql

yuan-x 2020-01-29 15:35 原文

一 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()

  

 
 




推荐阅读