pymysql是python中操作mysql的子產品。
1.pymysql子產品的安裝
pip3 install pymysql
也可以使用pycharm這個IDE工具來安裝pymysql這個子產品。
2.pymysql子產品的使用
1.執行mysql語句,擷取查詢的結果
代碼如下:
#!/usr/bin/env python
#_*_coding:utf-8_*_
import pymysql
#建立連接配接
conn=pymysql.connect(host="127.0.0.1",port=3306,user="root",passwd="",db="db1")
#建立遊标
cursor=conn.cursor()
#執行mysql語句,并傳回執行的結果
res=cursor.execute("select name from db1")
#列印執行的結果
print(res)
#把要執行的語句送出,否則無法儲存建立或者修改資料
conn.commit()
#關閉遊标
cursor.close()
#關閉連接配接
conn.close()
執行結果為:
4
因為從db1.db1這張表中檢索到四條資料,是以傳回的值為4
需要注意的是,查詢過程中存在中文的話,連接配接需要添加**"charset='utf-8'"**,否則中文會顯示亂碼
2.擷取查詢的資料
#!/usr/bin/env python
#_*_coding:utf-8_*_
import pymysql
#建立連接配接
conn=pymysql.connect(host="127.0.0.1",port=3306,user="root",passwd="",db="db1")
#建立遊标
cursor=conn.cursor()
#執行mysql語句
cursor.execute("select name from db1")
#擷取所有的執行結果
res=cursor.fetchall()
#列印擷取到的執行結果
print(res)
#送出要執行的mysql指令
conn.commit()
#關閉遊标
cursor.close()
#關閉連接配接
conn.close()
(('xiaoming',), ('xiaobing',), ('xiaoyong',), ('xiaojian',))
可以看到,傳回的結果是一個元組類型的資料.
還可以在建立遊标的時候,使用選項來指定傳回的結果為哪種資料類型:
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)
使用這個指令可以把傳回的結果變成字典類型。
在擷取執行的結果時,可以指定擷取的結果的條數,可以使用的選項如下:
fetchone() 取得檢索結果的一條資料
fetchmany(n) 取得檢索結果的n條資料
fetchall() 取得檢索結果的所有資料
需要注意的是,與讀取檔案時的指針類似.如果在同一段代碼中,先使用fetchone()擷取檢索結果的第一條資料,
然後再使用fetchmany(2)的話,指針會在檢索結果的目前位置向後讀取執行結果,而不會從頭開始重新讀取檢索的結果.
代碼如下:
#!/usr/bin/env python
#_*_coding:utf-8_*_
import pymysql
#建立連接配接
conn=pymysql.connect(host="127.0.0.1",port=3306,user="root",passwd="",db="db1")
#建立遊标
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)
#執行mysql語句,并傳回執行的結果
cursor.execute("select name from db1")
#取執行結果的第一條資料,并列印
res1=cursor.fetchone()
print("this is first result:",res1)
#從剩下的執行結果中再取兩條資料,并列印
res2=cursor.fetchmany(2)
print("this is second result:",res2)
#再從剩下的資料中取所有的資料,并列印
res3=cursor.getchall()
print("this is third result:",res3)
#送出要執行的指令
conn.commit()
#關閉遊标
cursor.close()
#關閉連接配接
conn.close()
執行結果如下:
this is first result: {'name': 'xiaoming'}
this is second result: [{'name': 'xiaobing'}, {'name': 'xiaoyong'}]
this is third result: [{'name': 'xiaojian'}]
第一次取第一行的檢索結果,第二次取兩行的時候,第三次取剩下的所有的結果.
因為資料表中隻有四條記錄,而第一次已經取走一行了,
第二次從第一次取得的結果又向後繼續取兩個值,是以最後取所有的值時,隻剩下一個,是以第三次取得一個值。
在建立遊标的時候,指定了傳回的資料類型為字典類型,是以傳回的結果是字典資料類型。
在使用fetch時,按照順序進行取得資料,可以使用cursor.scroll(num,mode)來移動遊标位置
mode指定位置,是相對目前位置,還是絕對位置
num指定移動的位數,正數向後移動,負數向前移動
例如:
cursor.scroll(1,mode="relative") #相對于目前的指針位置取一個值
cursor.scroll(2,mode="absolute") #在目前的絕對位置取一個值
"relative"與"absolute"的差別,看下面兩段代碼:
第一段代碼:
#!/usr/bin/env python
#_*_coding:utf-8_*_
import pymysql
conn=pymysql.connect(host="127.0.0.1",port=3306,user="root",passwd="",db="db1")
cursor=conn.cursor()
cursor.execute("SELECT * FROM db1")
cursor.fetchone()
cursor.scroll(1,mode="relative")
print(cursor.fetchone())
conn.commit()
cursor.close()
conn.close()
執行結果如下:
(3, 'xiaoyong', 'xiaoyong')
第二段代碼:
#!/usr/bin/env python
#_*_coding:utf-8_*_
import pymysql
conn=pymysql.connect(host="127.0.0.1",port=3306,user="root",passwd="",db="db1")
cursor=conn.cursor()
cursor.execute("SELECT * FROM db1")
cursor.fetchone()
cursor.scroll(1,mode="absolute")
print(cursor.fetchone())
conn.commit()
cursor.close()
conn.close()
(2, 'xiaobing', 'xiaobing')
3.擷取新建立資料的自增ID
#!/usr/bin/env python
# _*_coding:utf-8_*_
import pymysql
conn=pymysql.connect(host="127.0.0.1",port=3306,user="root",passwd="",db="db1")
cursor=conn.cursor()
cursor.execute('INSERT INTO db1(name,password) VALUES("xiaofei","xiaofei")')
conn.commit()
cursor.close()
conn.close()
res=cursor.lastrowid
print(res)
執行結果為:
5
資料表db1中本來有四條資料,現在新增一條,其ID為自增類型,是以傳回結果為5