標籤:pycharm fir select 入參 故障處理 http 語句 abs effect
安裝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‘) # 絕對位置,指標索引迴歸0r5 = 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]為nameprint(cursor.fetchall()) # 可以根據字典取值# 關閉遊標cursor.close()# 關閉串連conn.close()
其他動作:擷取自增ID
#!/usr/bin/env python# -*- coding:utf-8 -*-import pymysqlconn = 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()# 擷取最新自增IDnew_id = cursor.lastrowidprint(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