1. 程式人生 > >Python高階——資料庫程式設計(Mysql)

Python高階——資料庫程式設計(Mysql)

資料庫程式設計

1.資料庫基本操作:

# 匯入模組
from pymysql import *
# 建立連線
conn = connect(host='localhost', port=3306, user='root', passwd='zsh123', db='jing_dong', charset='utf8')
# 建立遊標物件
cs = conn.cursor()
# 執行sql語句
sql = 'select * from goods;'
cs.execute(sql)
# cs.fetchone()獲取一條資料
print(cs.fetchone())
# cs.fetchall()獲取全部資料
content = cs.fetchall() for i in content: print(i) # 關閉遊標物件和連線 cs.close() conn.close()

2.sql防注入:

   使用cursor.execute(sql, param)傳遞引數,param代表一個列表或者元組,可依次傳入sql中的%s佔位符中,系統自動拼接字串,防止’ or 1 or ‘等特殊字串對sql語句進行轉義。    sql = ‘…. where name=’%s’ % name    如果name為’ or 1 or ’ 搜尋結果為name=’ ’ or 1 or ’ ‘,sql語句被轉義,結果永真,會輸出資料庫全部資料

3.案例-京東商城:

# 匯入模組
from pymysql import *


class JD:
    # 初始化資訊
    def __init__(self):
        # 建立連線資訊
        self.conn = connect(host='localhost', port=3306, user='root',
                            passwd='zsh123', db='jing_dong', charset='utf8')
        # 建立遊標物件
        self.cs = self.conn.cursor()

    def
__del__(self):
self.cs.close() self.conn.close() # 顯示方法:傳入sql語句,顯示執行內容 def show_table(self, sql): self.cs.execute(sql) content = self.cs.fetchall() for i in content: for j in i: print(j, end=' ') print() # 顯示商品表 def show_goods(self): sql = "select goods.name,goods_cates.name,goods_brands.name,goods.price from" \ " goods inner join goods_cates on goods.cate_id=goods_cates.id inner join" \ " goods_brands on goods.brand_id=goods_brands.id;" self.show_table(sql) # 顯示種類表 def show_cates(self): sql = "select * from goods_cates" self.show_table(sql) # 顯示品牌表 def show_brands(self): sql = "select * from goods_brands" self.show_table(sql) # 查詢商品資訊 def show_good_info(self): name = input("請輸入要查詢的商品資訊:") sql = "select goods.name,goods_cates.name,goods_brands.name,goods.price from" \ " goods inner join goods_cates on goods.cate_id=goods_cates.id inner join" \ " goods_brands on goods.brand_id=goods_brands.id where goods.name like %s;" # 使用cursor.execute(sql, param)傳遞引數,param代表一個列表或者元組,可依次 # 傳入sql中的%s佔位符中,系統自動拼接字串,防止' or 1 or '等特殊字串,防注入 # sql = '.... where name='%s' % name 如果name為' or 1 or ' # 搜尋結果為name='' or 1 or '',sql語句被轉義,結果永真,會輸出資料庫全部資料 self.cs.execute(sql, ['%' + name + '%']) content = self.cs.fetchall() for i in content: for j in i: print(j, end=' ') print() @staticmethod def show_menu(): print("\n----------Welcome!----------") print("-----1.檢視所有商品資訊------") print("-----2.檢視商品種類資訊------") print("-----3.檢視商品品牌資訊------") print("-----4.查詢商品詳細資訊------") print("-----0.退出商品管理系統------") print("----------------------------\n") def run(self): while True: JD.show_menu() num = input("請輸入編號:") if num.isdigit(): if num == '1': self.show_goods() elif num == '2': self.show_cates() elif num == '3': self.show_brands() elif num == '4': self.show_good_info() elif num == '0': exit() else: print("輸入有誤,請重新輸入!") else: print("請輸入數字!") if __name__ == '__main__': jd = JD() jd.run()

執行結果: 這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述