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
相關文章
相關標籤/搜索