MySql - pymysql 的使用

主要內容:python

  • 1.pymysql的下載和使用
  • 2.excute() 中sql 注入
  • 3.cursor 
  • 4.增 刪 改 操做
  • 5. 查

 

1.pymysql 的下載和使用mysql

pymysql模塊,該模塊本質就是一個套接字客戶端軟件,經過 pymysql模塊 咱們就能夠在python程序中操做數據庫sql

1.1pymysql 的下載數據庫

#在pycharm的 Terminal 中輸入指令
 pip install pymysql

1.2 pymysql 模塊的使用緩存

(1)在數據庫中建立一張存用戶帳號密碼的表fetch

mysql> select * from userinfo;
+----+------+------+
| id | name | pwd  |
+----+------+------+
|  1 | alex | 1234 |
+----+------+------+

(2)pycharm 代碼編碼

#導入pymysql模塊
import pymysql
username ,password= input ("請輸入用戶名"),input ("請輸入密碼")
#鏈接數據庫
conn =pymysql.connect(
    host='127.0.0.1',     #這個是ip地址,此處填寫的是本機的迴環地址(也能夠填localhost)
    user ='root',         #數據庫用戶名
    password='',          #數據庫用戶名密碼
    database ='db10',     # 數據庫名,該數據庫中有存放帳號密碼的表
    port=3306,            #端口號 默認3306
    charset ='utf8'       #編碼方式,和數據庫編碼方式一致
)
#建立遊標,用來操做數據庫語句
cur = conn.cursor()
#數據庫語句 (注意此處的%s 須要加'')
sql ="select * from userinfo where name='%s' and pwd ='%s'" % (username,password)
#執行sql語句
result =cur.execute(sql)
#關閉光標
cur.close()
if result:
    print('登陸成功')
else:
    print("登陸失敗")

2.excute() 中sql 注入spa

2.1注入現象指針

最後那一個空格,在一條sql語句中若是遇到
select * from userinfo where username='alex' -- asadasdas' and pwd='' 則--以後的條件被註釋掉了(注意--後面還有一個空格)

#一、sql注入之:用戶存在,繞過密碼
alex' -- 任意字符

#二、sql注入之:用戶不存在,繞過用戶與密碼
xxx' or 1=1 -- 任意字符

2.2 解決code

# 原來是咱們對sql進行字符串拼接
# sql="select * from userinfo where name='%s' and pwd='%s'" %(username,password)
# result=cursor.execute(sql)

#改寫爲(execute幫咱們作字符串拼接,咱們無需且必定不能再爲%s加引號了)
 #!!!注意%s須要去掉引號,由於pymysql會自動爲咱們加上
sql="select * from userinfo where name=%s and password=%s"
#pymysql模塊自動幫咱們解決sql注入的問題,只要咱們按照pymysql的規矩來。
#當execute中列表和密碼是按列表方式傳入
result=cur.execute(sql,[user,pwd]) 
#此時獲得的結果是元祖

sql="select * from userinfo where name=%(name)s and password=%(password)s" 
result=cur.execute(sql,{"name":username,"password":pwd})
#此時輸出結果爲字典形式

3. cursor對象

Cursor對象就是對數據庫進行具體的操做了,好比增、刪、改、查等等一系列操做均可以完成

類型 描述
Cursor 普通的遊標對象,默認建立的遊標對象
SSCursor 不緩存遊標,主要用於當操做須要返回大量數據的時候
DictCursor 以字典的形式返回操做結果
SSDictCursor 不緩存遊標,將結果以字典的相識進行返回

 

 

 

 

 

 

 

 

注:不緩存遊標的特色是:根據須要獲取行,不是將全部的數據都複製到緩衝區。這樣作的好處是:客戶端使用更少的內存,而且當網速慢時或者結果集很是大時,返回行的速度要快得多

 4.增 刪 改 操做

 5.查

#獲取下一行數據,第一次爲首行;
etchone():
#獲取全部行數據源
fetchall():
#獲取4行數據
fetchmany(4):

默認狀況下,咱們獲取到的返回值是元組,只能看到每行的數據,殊不知道每一列表明的是什麼,這個時候可使用如下方式來返回字典,每一行的數據都會生成一個字典:

#在實例化的時候,將屬性cursor設置爲pymysql.cursors.DictCursor
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)  

移動指針:

 # 相對當前位置移動
cursor.scroll(1,mode='relative') 
# 相對絕對位置移動
cursor.scroll(2,mode='absolute') 
#第一個值爲移動的行數,整數爲向下移動,負數爲向上移動,mode指定了是相對當前位置移動,仍是相對於首行移動
相關文章
相關標籤/搜索