什么是 PyMySQL?
PyMySQL 是在 Python3.x 版本中用於連接 MySQL 服務器的一個庫,Python2中則使用mysqldb。
PyMySQL 遵循 Python 數據庫 API v2.0 規范,並包含了 pure-Python MySQL 客戶端庫。
PyMySQL的安裝
pip3 install pymysql
#pymysql模塊,同屬於套接字模塊。
PyMySQL的基本使用
使用PyMySQL模塊固定不變的執行順序
- 建立連接
- 拿到游標
- 執行SQL語句
- 關閉(游標、連接)
小例子:
import pymysql username = input('>>>:').strip() pwd = input('>->>:').strip() #建立連接 db = pymysql.connect( host='192.168.9.99', port=3306, user='root', password='123', db = 'dbname', charset='utf8', ) #拿到游標 cursor = db.cursor() #執行SQL語句 # sql = 'select * from userinfo where username = "%s" and pwd = "%s"' sql = 'insert into userinfo(username,pwd) values (%s,%s)' try: #rows變量得到數據庫中被影響的數據行數。 rows = cursor.execute(sql, (username, pwd)) # 向數據庫提交 db.commit() #如果沒有commit(),庫中字段已經向下移位但內容沒有寫進,可是自動生成的ID會自動增加。 except: # 發生錯誤時回滾 db.rollback() #關閉(游標、數據庫) cursor.close() db.close() if rows: #通過ROWS的返回值來判斷執行結果。 print('連接成功') else: print('登錄失敗')
插入多條數據:executemany()
使用executemany()來多條插入信息。要用列表包含元組的形式插入。[(),(),()]
例如:rows = cursor.executemany(sql,[('sly','123),('hh','123')]) #這個例子中的rows可以不加。它的作用是記錄影響的行數。
查詢
取返回數據用 fetch(一共三種)
- fetchone() 一次一條數據。
- fetchmany() 一次多條數據,括號內填入要讀取的數據條數。不填則為1條數據,如果讀數超過實際條數,只顯示實際條數。
-
fetchall() 一次讀取全部數據,如果管道內沒有數據,則返回空元組或空列表。
例如:print(cursor.fetchone()) 在管道中取一條數據。 注意:用fetchone()取值超過最大數會返回None
將取回值以字典形式顯示:pymysql.cursors.DictCursor
需在拿游標時加載
例如:cursor = db.cursor(pymysql.cursors.DictCursor)
移動指針
注意:當一次查詢結束后,再次查詢時為空,是因為指針到了最后位,如果想再次查找就需要將指針指向指定的位置。另外,指針的位置與列表一樣,首位為0。(第0位為第一條數據)
指針的移動有兩種:
1,相對絕對位置移動:absolute
#指的是由第一條記錄開始的第N個位置 #例如: scroll(2,mode='absolute') #指針指向數據的第2位這條記錄。數據的第一條記錄為第0位。
2,相對當前位置移動: relative
#指的是由當前的記錄位置開始的第N個位置 #例如: scroll(3,mode='relative') #指針指向當前數據位置的后數3位的記錄。
3,查詢當前數據庫中指針位置:lastrowid
#上次光標位置 print(cursor.lastrowid)
小練習:
import pymysql conn = pymysql.connect( host='127.0.0.1', port=3306, user='sly', password='123', db='pytest' ) cursor = conn.cursor(pymysql.cursors.DictCursor) sql = 'select * from userinfo' # sql = 'select * from userinfo where user=%s and pwd=%s' #查詢 # sql = 'select * from userinfo where user="%s" and pwd="%s"' % (user, pwd) #該方法不安全,要使用PYMYSQL模表導入。 # sql = 'insert into userinfo (user,pwd) value (%s,%s)' #增加 # sql = 'update userinfo set user=%s where user=%s' #更改 # sql = 'delete from userinfo where user=%s and pwd=%s' #刪除 # print(sql) # rows = cursor.execute(sql, (user, pwd)) # rows = cursor.executemany(sql, [('sly1', '123'), ('sly2', '123'), ('sly3', '123')]) rows = cursor.execute(sql) print(cursor.lastrowid) cursor.scroll(1, mode='absolute') print(cursor.fetchone()) # cursor.scroll(2, mode='relative') print('this is fetch one...') print(cursor.fetchmany(2)) print('this is fetch many....') print(cursor.fetchall()) print('this is fetch all...') print(rows) conn.commit() cursor.close() conn.close()
