PyMySQL模块的使用

PyMySQL

  PyMySQL是Python中操做MySQL的模块,其使用方法和MySQLdb几乎相同,但MySQLdb不支持python3.x版本。python

一、安装

pip3 install pymysql

二、使用

a、执行SQLmysql

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pymysql
  
# 建立链接
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1') #存在中文时,加上 charset='utf8'

# 建立游标
cursor = conn.cursor()

#默认为元组的形式返回,but..
#cursor=pymysql.cursors.DictCursor
#cursor=conn.cursor(cursor=cursor)#以字典的形式返回
  
# 执行SQL,并返回收影响行数
effect_row = cursor.execute("update hosts set host = '1.1.1.2'")
  
# 执行SQL,并返回受影响行数
#effect_row = cursor.execute("update hosts set host = '1.1.1.2' where nid > %s", (1,))
  
# 执行SQL,并返回受影响行数
#effect_row = cursor.executemany("insert into hosts(host,color_id)values(%s,%s)", [("1.1.1.11",1),("1.1.1.11",2)])
conn.commit()
# 提交,否则没法保存新建或者修改的数据 
cursor.close()
# 关闭游标

 cursor.close() 
# 关闭链接

 

b、获取新建立数据自增IDsql

cursor.close()
new_id = cursor.lastrowid

c、获取查询数据python3.x

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pymysql
  
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1')
cursor = conn.cursor()
cursor.execute("select * from hosts")
  
# 获取第一行数据
row_1 = cursor.fetchone()
  
# 获取前n行数据
# row_2 = cursor.fetchmany(3)
# 获取全部数据
# row_3 = cursor.fetchall()
  
conn.commit()
cursor.close()
conn.close()
View Code

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

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

d、fetch数据类型fetch

  关于默认获取的数据是元祖类型,若是想要或者字典类型的数据,即:spa

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pymysql
  
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1')
  
# 游标设置为字典类型
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
r = cursor.execute("call p1()")
  
result = cursor.fetchone()
  
conn.commit()
cursor.close()
conn.close()
View Code

e、调用存储过程code

    调用无参存储过程blog

#! /usr/bin/env python
# -*- coding:utf-8 -*-
 
import pymysql
 
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='', db='tkq1')
#游标设置为字典类型
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
#无参数存储过程
cursor.callproc('p2')  #等价于cursor.execute("call p2()")
 
row_1 = cursor.fetchone()
print row_1
 
 
conn.commit()
cursor.close()
conn.close()
View Code

   调用有参存储过程ip

#! /usr/bin/env python
# -*- coding:utf-8 -*-
 
import pymysql
 
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='', db='tkq1')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
 
cursor.callproc('p1', args=(1, 22, 3, 4))
#获取执行完存储的参数,参数@开头
cursor.execute("select @p1,@_p1_1,@_p1_2,@_p1_3")  #{u'@_p1_1': 22, u'@p1': None, u'@_p1_2': 103, u'@_p1_3': 24}
row_1 = cursor.fetchone()
print row_1
 
 
conn.commit()
cursor.close()
conn.close()
View Code

3、使用with简化链接过程

每次都链接关闭很麻烦,使用上下文管理,简化链接过程

 
import pymysql
import contextlib
#定义上下文管理器,链接后自动关闭链接
@contextlib.contextmanager
def mysql(host='127.0.0.1', port=3306, user='root', passwd='', db='User',charset='utf8'):
  conn = pymysql.connect(host=host, port=port, user=user, passwd=passwd, db=db, charset=charset)
  cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
  try:
    yield cursor
  finally:
    conn.commit()
    cursor.close()
    conn.close()
 
# 执行sql
with mysql() as cursor:
  print(cursor)
  row_count = cursor.execute("select * from tb")
  row_1 = cursor.fetchone()
  print( row_count, row_1)
View Code
相关文章
相关标签/搜索