Mysql學習---Python操作Mysql 1231

來源:互聯網
上載者:User

標籤: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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.