Python與Mysql交互

#轉載請聯繫html

在寫內容以前,先放一張圖,bling~前端

這張圖算是比較詳細的表達出了web開發都須要什麼。用戶訪問網頁,就是訪問服務器的網頁文件。這些網頁文件由前端工程師編寫的。服務器一般用nginx/apache(LNMP/LAMP)。這時候,用戶能瀏覽到頁面了。當用戶須要登陸時,確定要覈對用戶名密碼正不正確呀。這時候,服務器會把數據傳輸給web框架了,就是咱們的python應用程序。python應用程序和mysql數據庫進行通訊,查詢一下這個用戶的用戶名和密碼,再對比一下服務器傳來的。二者一致,就能夠登陸啦。因此,python在web全過程當中充當着處理數據的做用。python

既然是處理數據,那麼與數據庫的通訊是必不可少的了。如今就開始瞭解下他們怎麼實現通訊。mysql

1.安裝pymysql模塊nginx

2.pymysql的使用web

  • import pymysql
  • 建立connection鏈接對象
conn = pymysql.connection(host='localhost',user='xxx',password='xxx',database='xxx',port=xxx,charset='utf8')
  • 取得cursor遊標對象
cur = conn.cursor()  # 取得的是元組遊標
cur = conn.cursor(cursor=pymysql.cursors.DictCursor) # 拓展!取得的是字典遊標
  • 經過cursor遊標執行sql命令
affect_rows = cur.execute('sql語句')
# 執行SQL語句,返回受影響的行數
# affect_rows是受影響的行數,一個數
  • 經過cursor遊標取得執行結果
result = cur.fetchall()
print(result)
# cur.fetchone()返回一個元組,形如(1,'妲己',18) # cur.fetchall()獲取結果集的全部行,一行構成一個元組,再將這些元組裝入一個元組返回,形如((1,'公孫離',20),(2,'妲己',18))
# 注意:用fetchone抓取一條數據後,再用fetchall抓取數據,是從第二條開始抓取,抓取剩餘的所有
  • 若是是對數據庫的增刪改,還有提交這一步驟。
conn.commit()
  • 關閉遊標cursor
cur.close()
  • 關閉鏈接
conn.close()

 

python與mysql交互的方式很簡單,可是有一個大坑必定要注意,否則真的總是出錯!sql

經過一個程序來看下這個坑!數據庫

 1 import pymysql  2 
 3 
 4 def main():  5     conn = pymysql.connect(host='localhost',port=3306,user='root',password='xxx',  6                            database='db_jingdong',charset='utf8')  7     cur = conn.cursor()  8     item = input("請輸入你要查詢商品信息的商品id:")  9     cur.execute('select * from goods where id=%s' % item) 10     result = cur.fetchall() 11     print(result) 12 
13 
14 if __name__ == '__main__': 15     main()

看第9行!apache

item是input獲取的,因此是字符串。字符串在python中輸出都是帶 " " 的。可是!他在第9行插進 sql 語句時,不會把 " " 帶進去,只帶本身的值。因此他在 sql 語句中是一個整數!服務器

因此,當咱們的 sql 語句須要 " " 時,必定要寫,字符串的 " " 是帶不進去的!

 

說在最後,其實這篇文章的操做還有不足之處。就是惡意的人會經過input輸入其餘內容,就能夠獲取數據庫的其餘內容!

原理是什麼?怎麼避免?請看個人這一篇博文:https://www.cnblogs.com/chichung/p/9596716.html

相關文章
相關標籤/搜索