1. 程式人生 > >python基礎篇-python操作mysql

python基礎篇-python操作mysql

class -c 密碼錯誤 字典類 input https relative 通過 tps

本篇對於Python操作MySQL主要使用兩種方式:

  • 原生模塊 pymsql
  • ORM框架 SQLAchemy

pymysql

下載安裝

pip3 install pymysql   #pip3命令的路徑:安裝路徑下的Scripts目錄

# 下載 pymysql到本地
# 解壓到執行目錄 
# python2,默認無pip命令
# python3,默認自帶pip3命令 python3 -m pip install --upgrade pip 更新pip
#https://pypi.python.org/pypi  模塊源

使用操作

1.執行sql語句

 1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*- 3 import pymysql 4 5 # 創建連接 6 conn = pymysql.connect(host=127.0.0.1, port=3306, user=root, passwd=123, db=t1‘,charset=‘utf8‘) 7 # 創建遊標(創建連接只是打開了數據庫,要想取數據需要通過遊標來取) 8 cursor = conn.cursor() 9 10 # 執行SQL,並返回受收影響行數(即有一個返回值) 11 effect_row = cursor.execute("update
hosts set host = ‘1.1.1.2‘
") 12 cursor.execute("insert into class(caption) values(‘全棧二班‘)") 13 14 # 執行SQL,並返回受影響行數,插入多行使用executemany 15 #effect_row = cursor.executemany("insert into hosts(host,color_id)values(%s,%s)", [("1.1.1.11",1),("1.1.1.11",2)]) 16 effect_row = cursor.execute("delete from score where sid = 3") 17
18 inp = input("請輸入IP地址") 19 cursor.execute("insert into hosts(host) values(%s)",inp)
20
21 cursor.execute("select * from student") #查詢的數據從數據庫中取出保存在內存中
22 result1 = cursor.fetchall()
23 print(result1) #輸出查詢的結果
24 result2 = cursor.fetchone()
25 print(result2) #輸出查詢的第一條結果
26 result3 = cursor.fetchmany(3)
27 print(result3) #輸出查詢的前n條結果
28 22 # 提交,不然無法保存新建或者修改的數據 23 conn.commit() 24 25 # 關閉遊標 26 cursor.close() 27 # 關閉連接 28 conn.close()

2.獲取查詢數據

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 import pymysql
 4   
 5 conn = pymysql.connect(host=127.0.0.1, port=3306, user=root, passwd=123, db=t1)
 6 cursor = conn.cursor()
 7 cursor.execute("select * from hosts")
 8   
 9 # 獲取第一行數據
10 row_1 = cursor.fetchone()
11   
12 # 獲取前n行數據
13 # row_2 = cursor.fetchmany(3)
14 # 獲取所有數據
15 # row_3 = cursor.fetchall()
16   
17 conn.commit()
18 cursor.close()
19 conn.close()

註:在fetch數據時按照順序進行,可以使用cursor.scroll(num,mode)來移動遊標位置,如:

    • cursor.scroll(1,mode=‘relative‘) # 相對當前位置移動即指針相對當前位置往下走一個,負數表示往上走
    • cursor.scroll(2,mode=‘absolute‘) # 相對絕對位置移動即指針回到第2個位置

3.sql註入

  無需用戶名和密碼就可以實現對數據庫進行插入操作

 1 conn = pymysql.connect(host=127.0.0.1, port=3306, user=root, passwd=123, db=t1)
 2 #正常應采用以下的方式,不會出現安全問題
 3 cursor.execute(select username,password from userinfo where username=%s and password=%s,(alex,123))
 4 result = cursor.fetchone()
 5 print(result)
 6 
 7 #字符串拼接會出現安全問題
 8 #可正常執行:
 9 sql = select username,password from userinfo where username="%s" and password="%s"
10 sql = sql %(alex,123)
11 cursor.execute(sql)
12 result = cursor.fetchone()
13 print(result)
14 
15 #不能執行
16 sql = select username,password from userinfo where username="%s" and password="%s"
17 sql = sql %(alex,1236) 18 cursor.execute(sql) 19 result = cursor.fetchone() 20 print(result) 21 22 #可正常執行:即密碼錯誤也能取到數據 23 sql = select username,password from userinfo where username="%s" and password="%s"
24 sql = sql %(alex‘‘ -- ,1236) #‘select username,password from userinfo where username="alex‘‘ -- " and password="%s" 後面的就註釋掉
#sql = sql %(alex‘‘ or 1=1 -- ‘,1236) 即使不存在用戶名也成立即命令也能執行
25 cursor.execute(sql) 26 result = cursor.fetchone() 27 print(result)

4.fetch數據類型

關於默認獲取的數據是元祖類型,如果想要獲取字典類型的數據,即:

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 import pymysql
 4   
 5 conn = pymysql.connect(host=127.0.0.1, port=3306, user=root, passwd=123, db=t1)
 6   
 7 # 遊標設置為字典類型
 8 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
 9 
10 11 result = cursor.fetchone() 12 13 conn.commit() 14 cursor.close() 15 conn.close()

5.獲取新創建數據自增ID

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 import pymysql
 4   
 5 conn = pymysql.connect(host=127.0.0.1, port=3306, user=root, passwd=123, db=t1)
 6 cursor = conn.cursor()
 7 cursor.executemany("insert into hosts(host,color_id)values(%s,%s)", [("1.1.1.11",1),("1.1.1.11",2)])
 8 conn.commit()
 9 cursor.close()
10 conn.close()
11   
12 # 獲取最新自增ID
13 new_id = cursor.lastrowid

python基礎篇-python操作mysql