--------安裝
pip install pymysql
-----連接數據庫
1.數據庫中查詢出的數據
SELECT book_id,book_name FROM t_book WHERE market_rule=1
2.連接數據庫
import pymysql import types #連接數據庫 connect=pymysql.connect(host="192.168.6.41",user="lrtsaudio",password="2&Ty3DW75i!(vgo.l3Odp1fgWgEG",port=3306,db="audiobook") #創建一個游標對象:有兩種創建方法 cursor=connect.cursor()
#或:cursor=pymysql.cursors.Cursor(connect) #使用游標的execute()方法執行sql語句 cursor.execute("SELECT book_id,book_name FROM t_book WHERE market_rule=1") #使用fetchall()獲取全部數據 r1=cursor.fetchall() print(r1) print(type(r1)) #關閉游標連接 cursor.close() #關閉數據庫連接 connect.close()
結果如下:(返回結果為元組)
也可以通過字典來傳遞參數:效果是一樣的
dbinfo={"host":"192.168.6.41", "user":"lrtsaudio", "password":"2&Ty3DW75i!(vgo.l3Odp1fgWgEG", "db":"audiobook" } sql="SELECT * FROM t_book WHERE market_rule=1" connect1=pymysql.connect(**dbinfo) cursor1=connect1.cursor() cursor1.execute(sql) r2=cursor1.fetchall() print(r2) cursor1.close() connect1.close
-------connect()各個參數代表的意思
host=None, # 要連接的主機地址 user=None, # 用於登錄的數據庫用戶 password='', # 密碼 database=None, # 要連接的數據庫 port=0, # 端口,一般為 3306 unix_socket=None, # 選擇是否要用unix_socket而不是TCP/IP charset='', # 字符編碼 sql_mode=None, # Default SQL_MODE to use. read_default_file=None, # 從默認配置文件(my.ini或my.cnf)中讀取參數 conv=None, # 轉換字典 use_unicode=None, # 是否使用 unicode 編碼 client_flag=0, # Custom flags to send to MySQL. Find potential values in constants.CLIENT. cursorclass=<class 'pymysql.cursors.Cursor'>, # 選擇 Cursor 類型 init_command=None, # 連接建立時運行的初始語句 connect_timeout=10, # 連接超時時間,(default: 10, min: 1, max: 31536000) ssl=None, # A dict of arguments similar to mysql_ssl_set()'s parameters.For now the capath and cipher arguments are not supported. read_default_group=None, # Group to read from in the configuration file. compress=None, # 不支持 named_pipe=None, # 不支持 no_delay=None, # autocommit=False, # 是否自動提交事務 db=None, # 同 database,為了兼容 MySQLdb passwd=None, # 同 password,為了兼容 MySQLdb local_infile=False, # 是否允許載入本地文件 max_allowed_packet=16777216, # 限制 `LOCAL DATA INFILE` 大小 defer_connect=False, # Don't explicitly connect on contruction - wait for connect call. auth_plugin_map={}, # read_timeout=None, # write_timeout=None, bind_address=None # 當客戶有多個網絡接口,指定一個連接到主機
-------查詢數據
import pymysql dbinfo={"host":"192.168.6.41", "user":"lrtsaudio", "password":"2&Ty3DW75i!(vgo.l3Odp1fgWgEG", "db":"audiobook" } sql1="SELECT book_id,book_name FROM t_book WHERE market_rule=1" sql2="SELECT * FROM audiobook.w_activity_ticket_3 WHERE user_id=234739503" connect1=pymysql.connect(**dbinfo) cursor1=connect1.cursor() cursor1.execute(sql1) #返回值為受影響的行數,如下: """ num=cursor1.execute(sql1) print(num) #結果:num=8 """ r_all=cursor1.fetchall()#取出全部查詢結果 r_one=cursor1.fetchone()#取出一行查詢結果。從第一行開始取 r_many=cursor1.fetchmany(size=2)#取出其中幾行查詢結果 print(r_all) print(r_one) print(r_many) cursor1.close() connect1.close()
注釋掉fetchall的代碼后結果:
!!!也就是說:
如fetchall(),fetchmany(),fetchone()同時作用於同一個查詢時,每個方法執行開頭是上一個方法執行的結尾
----可以通過scroll()來重置游標位置,從我們需要的位置獲取我們想要的數據
cursor.scroll(sele,value,mode="")
# value: 偏移量 大於0向后移動; 小於0向前移動 # mode: relative:表示從當前所在的行開始移動; absolute:表示從第一行開始移動 (默認relative)
.....
cursor1.execute(sql1) cursor1.scroll(2) #mode不填時,默認為“relative” r1=cursor1.fetchone() cursor1.scroll(1,mode="relative") r2=cursor1.fetchone() cursor1.scroll(5,mode="absolute") r3=cursor1.fetchone() cursor1.scroll(-1) r4=cursor1.fetchone() print(r1,"\n",r2,"\n",r3,"\n",r4)
.....
結果:
----游標類型:可控制返回數據類型
上面的實例中,使用的均是普通游標,返回結果為元組:查看起來不太方便,我們可以通過游標類型來控制數據返回類型
----游標類型:
--有兩種方法定義游標類型:(只需其中一種即可)
#1.在connect()中通過 “cursorclass=pymysql.cursors.DictCursor” 來定義 connect=pymysql.connect(host="192.168.6.41",user="lrtsaudio",password="2&Ty3DW75i!(vgo.l3Odp1fgWgEG",port=3306,db="audiobook",cursorclass=pymysql.cursors.DictCursor) #2.在創建游標時定義(兩種創建游標的方法使用方式如下:)
cursor=connect.cursor(pymysql.cursors.DictCursor) cursor=pymysql.cursors.Dictcursor(connect)
結果:返回字典類型的list
--不緩存游標的用法: