pymysql模塊

pymysql模塊

下載PyMySQL的兩種方式:
第一種:python

 

第二種:mysql

PyMySQL的用法:

import pymysql

conn = pymysql.Connect(   #實例化出一個conn對象
    user='root',  # sql登陸的用戶名
    password='admin', # sql登陸的用密碼
    port=3306,    # MySQL的端口號
    host='127.0.0.1', # 本地地址
    charset='utf8',   # 字符編碼
    database='q1',      # 數據庫名
)
# cursor獲取遊標對象 底層封裝的是 recv send   pymysql.cursors.DictCursor 指定返回的結果爲字典類型
cursor = conn.cursor(pymysql.cursors.DictCursor)
# sql 語句
user = input('請輸入姓名:').strip()
ps = input('請輸入密碼:').strip()
sql = "select * form userinfo where user = '%s' and password = '%s'"%(user,ps)

res = cursor.execute(sql) # 執行slq 語句
print(res)
if res:
    print('插入成功')
else:
    print('插入失敗')
conn.commit()  # pymysql 模塊默認提供事物  若是沒有提交等於代碼沒有執行  表與表之間事物能夠撤銷 表之間須要提交 可是庫是不行的 若是執行庫的操做會刪除庫
conn.commit() # 指的是操做表的記錄(數據)不會提交 須要conn.commit()來提交 而 刪除表 刪除庫則會真實的刪除
conn.rollback() # 發生錯誤 撤回操做
cursor.close()
conn.close()

注意:在寫插入的語句的時候須要用 commit()來提交執行的SQL語句

SLQ注入的問題:

以上代碼存在SQL注入的問題sql

因爲上面代碼時經過本身%s拼接的 因此當用戶輸入到用戶名的時候 好比 用戶輸入 zk’  or 1=1 這樣的話也是能夠登陸成功的  或者用戶輸入 zk’ --dadawd數據庫

在MySQL中 -- 或者 # 都是註釋的意思,因此在拼接的時候用戶能夠找到這個漏洞來直接登陸。編碼

解決(交給MySQL本身去拼接):spa

# Author:ZhaoKang

import pymysql

conn = pymysql.Connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    password='admin',
    database='day41',
    charset='utf8',
    autocommit=True
)

cursor = conn.cursor(pymysql.cursors.DictCursor)

user = input('請輸入姓名:').strip()
ps = input('請輸入密碼:').strip()
sql = "select * from userinfo where user = %s and password = %s"

res = cursor.execute(sql,(user, ps))
print(res)
if res:
    print('登陸成功')
else:
    print('登陸失敗')

注意:

pymysql 模塊默認提供事物  若是沒有提交等於代碼沒有執行  表與表之間事物能夠撤銷 表之間須要提交 可是庫是不行的 若是執行庫的操做會刪除庫
相關文章
相關標籤/搜索