#轉載請聯繫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