pymysql的下載和使用 該模塊本質就是一個套接字客戶端軟體,使用前需要事先安裝,能夠讓我們在 Python程式中操作資料庫. pymysql模塊的下載: 在Python安裝文件中找到scripts文件 shift+右鍵打開powershell,接著如下圖: pymysql的使用 (數據均已存在) ...
pymysql的下載和使用
該模塊本質就是一個套接字客戶端軟體,使用前需要事先安裝,能夠讓我們在
Python程式中操作資料庫.
pymysql模塊的下載:
在Python安裝文件中找到scripts文件 shift+右鍵打開powershell,接著如下圖:
pymysql的使用 (數據均已存在)
實現:
#導入模塊 import pymysql username = input('請輸入用戶名:') password = input('請輸入密碼:') #創建連接 conn = pymysql.connect( host = '127.0.0.1', user = 'root', database = 'db1', port = 3306, charset = 'utf8' ) #創建游標 cur = conn.cursor() sql = 'select * from login where name = "%s" and password = %s ' %(username,password) #註意 name 在創建的表中未vachar類型 ,所以必選要加 "" . print(sql) rescount = cur.execute(sql)#執行sql語句,返回sql查詢成功的記錄數目 print(rescount) if rescount: print('成功') else: print('失敗') #關閉連接,游標 cur.close() conn.close
註意 : -- + 空格 為註釋
前端是不安全的,在上述的操作中存在漏洞,
正確解決方法為:
#導入模塊 import pymysql username = input('請輸入用戶名:') password = input('請輸入密碼:') #創建連接 conn = pymysql.connect( host = '127.0.0.1', user = 'root', database = 'db1', port = 3306, charset = 'utf8' ) #創建游標 cur = conn.cursor() sql = 'select * from login where name = %s and password = %s ' #註意 name 在此時不能再加 "" . print(sql) rescount = cur.execute(sql,[username,password]) #由我們對sql進行字元串拼接改為execute幫我們做字元串拼接,可以是列表 元祖 字典.pymysql模塊自動幫我們解決sql註入問題. print(rescount) if rescount: print('成功') else: print('失敗') #關閉 cur.close() conn.close
註意:當為字典時:
增 刪 改 (conn.commit())
commit() 方法:在資料庫里增刪改的時候,必須進行提交,否則插入的數據不生效.
import pymysql username = input('請輸入用戶名:') pwd = input('請輸入密碼:') # 1.連接 conn = pymysql.connect(host='localhost', port=3306, user='root', password='', db='db1', charset='utf8') # 2.創建游標 cursor = conn.cursor() # 操作 # 增 # sql = "insert into userinfo(username,password) values (%s,%s)" # effect_row = cursor.execute(sql,(username,password)) #同時插入多條數據 #cursor.executemany(sql,[('李四','110'),('王五','119')]) # print(effect_row)# # 改 # sql = "update userinfo set username = %s where id = 2" # effect_row = cursor.execute(sql,username) # print(effect_row) # 刪 sql = "delete from userinfo where id = 2" effect_row = cursor.execute(sql) print(effect_row) #一定記得commit conn.commit() # 4.關閉游標 cursor.close() # 5.關閉連接 conn.close()
查 fetchone , fetchmany , fetchall
fetchone():獲取下一行數據,第一次為首行;
fetchall():獲取所有行數據源
fetchmany(4):獲取4行數據
查看一下表內容:
#導入模塊 import pymysql #創建連接 conn = pymysql.connect( host = '127.0.0.1', user = 'root', database = 'db1', port = 3306, charset = 'utf8' ) #創建游標 cur = conn.cursor(cursor=pymysql.cursors.DictCursor)#加入此句可以讓結果以字典的形式呈現. #cur = conn.cursor()#預設我們獲取到的返回值是元祖,只能看到每行的數據,卻不知到每一列
#代表的是什麼. sql = 'select * from login' print(sql) rescount = cur.execute(sql) print(rescount) # row = cur.fetchone() # print(row) # row = cur.fetchone()#上一條查詢後游標會向下移動 # print(row) row1 = cur.fetchall()#查出所有結果 print(row1)
#fetchmany.... #關閉 cur.close() conn.close
在fetchone示例中,在獲取行數據的時候,可以理解開始的時候,有一個行指針指著第一行的上方,
獲取一行,它就向下移動一行,所以當行指針到最後一行的時候,就不能再獲取到行的內容,所以
我們可以使用如下方法來移動行指針
cursor.scroll(1,mode='relative') # 相對當前位置移動 cursor.scroll(2,mode='absolute') # 相對絕對位置移動 第一個值為移動的行數,整數為向下移動,負數為向上移動,mode指定了是相對當前位置移動,還是相對於首行移動
# 1.Python實現用戶登錄 # 2.Mysql保存數據 import pymysql # 1.連接 conn = pymysql.connect(host='localhost', port=3306, user='root', password='', db='db8', charset='utf8') # 2.創建游標 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) sql = 'select * from userinfo' cursor.execute(sql) # 查詢第一行的數據 row = cursor.fetchone() print(row) # (1, 'mjj', '123') # 查詢第二行數據 row = cursor.fetchone() # (3, '張三', '110') print(row) cursor.scroll(-1,mode='relative') #設置之後,游標相對於當前位置往前移動了一行,所以列印的結果為第二行的數據 row = cursor.fetchone() print(row) cursor.scroll(0,mode='absolute') #設置之後,游標相對於首行沒有任何變化,所以列印的結果為第一行數據 row = cursor.fetchone() print(row) # 4.關閉游標 cursor.close() # 5.關閉連接 conn.close() #結果如下 {'id': 1, 'username': 'mjj', 'pwd': '123'} {'id': 3, 'username': '張三', 'pwd': '110'} {'id': 3, 'username': '張三', 'pwd': '110'} {'id': 1, 'username': 'mjj', 'pwd': '123'}