pymysql模塊

先創建遠程帳戶並受權

grant all on *.* to 'root'@'%'identified by '123';
 flush privileges; 
 # 刷新

##### mysql模塊基本使用mysql

import pymysql

user = input('用戶名: ').strip()
pwd = input('密碼: ').strip()

conn = pymysql.connect(
   host='192.168.31.80',
   port=3306,
   user='root',
   password='123',
   db='luffy',
   charset='utf8'
)

# 拿到遊標
cursor = conn.cursor()

# 執行sql語句
sql = 'select * from userinfo where user="%s" and pwd="%s"' % (user, pwd)
# 不用這招,會致使sql注入問題
rows = cursor.execute(sql)

cursor.close()
conn.close()

# 進行判斷

if rows:
   print('登錄成功')
else:
   print('登錄失敗')

execute()之sql注入

根本原理:就根據程序的字符串拼接name='%s',咱們輸入一個xxx' -- haha,用咱們輸入的xxx加'在程序中拼接成一個判斷條件name='xxx' -- haha'sql

最後那一個空格,在一條sql語句中若是遇到select * from t1 where id > 3 -- and name='egon';則--以後的條件被註釋掉了

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

#二、sql注入之:用戶不存在,繞過用戶與密碼
xxx" or 1=1 -- 任意字符
解決方法
import pymysql

user = input('用戶名: ').strip()
pwd = input('密碼: ').strip()

conn = pymysql.connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    password='123',
    db='luffy',
    charset='utf8'
)

# 拿到遊標
cursor = conn.cursor()

# 執行sql語句
sql = 'select * from userinfo where user=%s and pwd=%s' 
# %s 去掉引號,pymysql會自動添加
rows = cursor.execute(sql, [user, pwd])

cursor.close()
conn.close()

# 進行判斷

if rows:
    print('登錄成功')
else:
    print('登錄失敗')

pymysql增刪改

import pymysql

conn = pymysql.connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    password='123',
    db='luffy',
    charset='utf8'
)

# 拿到遊標
cursor = conn.cursor()
sql = 'insert into userinfo(user, pwd) values(%s, %s)'
rows = cursor.execute(sql, ('test', '111'))  # 插一條
# rows = cursor.executemany(sql, [('yxx', '123'), ('egon1', '12345')])
# 插多條記錄
print(rows)
print(cursor.lastrowid) # 最後一個插入的id

conn.commit()
cursor.close()
conn.close()

sql之查詢

import pymysql

# 創建連接
conn=pymysql.connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    password='123',
    db='luffy',
    charset='utf8'
)

# 拿遊標
cursor = conn.cursor(pymysql.cursors.DictCursor)  # cursor以字典形式
rows = cursor.execute('select * from userinfo')
# print(rows)
# print(cursor.fetchmany(2))
# res1 = cursor.fetchone()
# res2 = cursor.fetchone()
# res3 = cursor.fetchone()
# res4 = cursor.fetchone()

# print(res1)
# print(res4)
cursor.scroll(3, mode='absolute')  # 相對絕對位置移動
cursor.scroll(3, mode='relative')  # 相對當前位置移動
res5 = cursor.fetchone()
print(res5)
cursor.close()
conn.close()
相關文章
相關標籤/搜索