Mysql學習---Python操作Mysql 1231
阿新 • • 發佈:2018-07-29
https cut 進入 無法 rom png -s swd bsp
安裝PyMysql
安裝PyMysql:Py3默認自帶pip3安裝,Py2默認無pip命令
cmd進入PyCharm的安裝目錄完成安裝 pip3 install pymysql
安裝完成的位置:E:\PyCharm 2017.2.4\Python3.2.5\Lib\site-packages
故障處理:更新一下默認的Python安裝
Py下操作Mysql
PyMySQL - 專門用於操作MySQLpython模塊, Py2和Py3同時兼容
- MySQLdb(py3暫時不支持MySQLdb)
基本操作:添加信息——Insert
# -*- coding:utf-8 -*- import pymysql # 創建連接 conn = pymysql.connect(host=‘127.0.0.1‘, port=3306, user=‘root‘, passwd=‘‘, db=‘test_python‘, charset=‘utf8‘) # 創建遊標 cursor = conn.cursor() # 默認是元組,可以更改為字典類型 # 第一種:直接插入 # 執行SQL,並返回受影響行數 insert_effect_row = cursor.execute("insert into course(cname, teacher_id) VALUES (‘hhhh43hhkkhh‘, ‘2‘)") inp = input(‘請輸入姓名:‘) inp2 = input(‘請輸入教師ID:‘) # 第二種:字符串拼接 # sql = ‘insert into course(cname) VALUES ("%s")‘ %inp # cursor.execute(sql) # 字符串拼接可以用,但是容易造成sql註入不推薦使用 # 第三種:參數傳遞,利用%s做占位符號,傳入參數進去,PyMysql內部幫我們轉換 insert_effect_row_sec = cursor.execute("insert into course(cname, teacher_id) VALUES (%s, %s)", (inp, inp2)) # 參數傳遞 # 第四種: 多條信息的插入 li = [ (‘哇哈哈1‘, 1), (‘哇哈哈2‘, 2), (‘哇哈哈3‘, 3), ] executmany = cursor.executemany("insert into course(cname, teacher_id) VALUES (%s, %s)", li) # 傳入可叠代的類型 print(‘executmany:‘, executmany) # executmany: 3 ,修改成功3條 # 提交,不然無法保存新建或者修改的數據 conn.commit() # 關閉遊標 cursor.close() # 關閉連接 conn.close()
基本操作:查找信息——Select
# -*- coding:utf-8 -*- import pymysql # 創建連接 conn = pymysql.connect(host=‘127.0.0.1‘, port=3306, user=‘root‘, passwd=‘‘, db=‘test_python‘, charset=‘utf8‘) # 創建遊標 cursor = conn.cursor() ret = cursor.execute(‘select * from student‘) # 僅僅數據加載到內存,需要fetch取值 print(ret) # 查找到結果的數量 # 第一種: 直接打印,數據量大的時候容易導致內存不夠用(內部有一個指針索引) # r = cursor.fetchall() # print(‘取出所有值\n‘, r) # 打印結果,結果是一個元組 # 第二種: 從內存中取出來1條數據,此時數據已經加載到內存 r1 = cursor.fetchone() print(‘拿出一個\n:‘, r1) # 第三種: 從內存中取出來3條數據,此時數據已經加載到內存 r3 = cursor.fetchmany(3) print(‘拿出三個\n:‘, r3) # 第四種:操作指針取出數據 # cursor.scroll(0, mode=‘relative‘) # 相對位置,指針索引回歸0, +1/-1 分別表示向上/向下 # r4 = cursor.fetchmany(3) # print(‘相對索引拿出三個\n:‘, r4) # 從第5個開始取值 : ((5, ‘女‘, 1, ‘張二‘), (6, ‘男‘, 1, ‘張四‘), (7, ‘女‘, 2, ‘鐵錘‘)) cursor.scroll(0, mode=‘absolute‘) # 絕對位置,指針索引回歸0 r5 = cursor.fetchmany(3) print(‘絕對索引拿出三個\n:‘, r5) # 從第0個位置開始取值: ((1, ‘男‘, 1, ‘理解‘), (2, ‘女‘, 1, ‘鋼蛋‘), (3, ‘男‘, 1, ‘張三‘)) # 關閉遊標 cursor.close() # 關閉連接 conn.close()
基本操作:更改信息——Update
# -*- coding:utf-8 -*- import pymysql # 創建連接 conn = pymysql.connect(host=‘127.0.0.1‘, port=3306, user=‘root‘, passwd=‘‘, db=‘test_python‘, charset=‘utf8‘) # 創建遊標 cursor = conn.cursor() inp = input(‘請輸入更新後的信息:‘) ret = cursor.execute("update course set cname = %s where cname = ‘哇哈哈4‘", inp) ret2 = cursor.execute("update course set cname = %s where cname = ‘哇哈哈1‘", inp) # 提交,不然無法保存新建或者修改的數據 conn.commit() print(‘不存在且更新結果:‘, ret, ‘\r\n存在且更新結果:‘, ret2) # 關閉遊標 cursor.close() # 關閉連接 conn.close()
基本操作:刪除信息——Delete
# -*- coding:utf-8 -*- import pymysql # 創建連接 conn = pymysql.connect(host=‘127.0.0.1‘, port=3306, user=‘root‘, passwd=‘‘, db=‘test_python‘, charset=‘utf8‘) # 創建遊標 cursor = conn.cursor() inp = input(‘請輸入更新後的信息:‘) ret = cursor.execute("update course set cname = %s where cname = ‘哇哈哈4‘", inp) ret2 = cursor.execute("update course set cname = %s where cname = ‘哇哈哈1‘", inp) # 提交,不然無法保存新建或者修改的數據 conn.commit() print(‘不存在且更新結果:‘, ret, ‘\r\n存在且更新結果:‘, ret2) # 關閉遊標 cursor.close() # 關閉連接 conn.close()
其他操作: 更改遊標的返回值為字典
# -*- coding:utf-8 -*- import pymysql # 創建連接 conn = pymysql.connect(host=‘127.0.0.1‘, port=3306, user=‘root‘, passwd=‘‘, db=‘test_python‘, charset=‘utf8‘) # 創建遊標 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) cursor.execute(‘select cid as id , cname as name from course‘) # 可以更改原理字典的key[cname]為name print(cursor.fetchall()) # 可以根據字典取值 # 關閉遊標 cursor.close() # 關閉連接 conn.close()
其他操作:獲取自增ID
#!/usr/bin/env python # -*- coding:utf-8 -*- import pymysql conn = pymysql.connect(host=‘127.0.0.1‘, port=3306, user=‘root‘, passwd=‘‘, db=‘test_python‘, charset=‘utf8‘) cursor = conn.cursor() cursor.executemany("insert into course(cname, teacher_id)values(%s,%s)", [("百事可樂", 1), ("可口可樂", 2)]) conn.commit() # 獲取最新自增ID new_id = cursor.lastrowid print(new_id) cursor.close() conn.close()
防SQL註入的方法
防SQL註入的方法:
1. 存儲過程
2. 占位符拼接 切記用字符串拼接
SQL註入:更改了原來的sql語句,不推薦拼接,推薦參數傳遞
# -*- coding:utf-8 -*- import pymysql # 創建連接 conn = pymysql.connect(host=‘127.0.0.1‘, port=3306, user=‘root‘, passwd=‘‘, db=‘test_python‘, charset=‘utf8‘) # 創建遊標 cursor = conn.cursor() sql = ‘select * from course where cid = "%s" and cname = "%s"‘ # sql = sql % (‘24‘, ‘哇哈哈3‘) # 正常 sql = sql % (‘24"-- ‘, ‘哇哈哈3‘) # SQL註入取值,註釋掉了後面的內容 # sql = sql % (‘24" or 1=1 -- ‘, ‘哇哈哈3‘) # SQL註入取值,後面的條件恒成立,可查詢所有結果 print(sql) ret = cursor.execute(sql); r = cursor.fetchall() print(‘執行結果:‘, r) # 關閉遊標 cursor.close() # 關閉連接 conn.close()
Mysql學習---Python操作Mysql 1231