1. 程式人生 > 實用技巧 >python爬蟲與Django框架vue互動的前後端程式碼詳情(勵志人生網例項)

python爬蟲與Django框架vue互動的前後端程式碼詳情(勵志人生網例項)

一 連結、執行sql、關閉

import pymysql

user = input('please input your account:')
pwd = input('please input your password:')

# 連結
conn = pymysql.connect(host='127.0.0.1', user='root', password='wanjiang', database='db10')

#遊標
cursor = conn.cursor()  # 執行完畢返回的結果集預設以元組顯示

# 執行sql語句
sql = 'select * from useinfo where account="%s" and pwd="%s"' % (user, pwd)
print(sql)

res = cursor.execute(sql)  
# 執行sql語句,返回查詢成功的記錄數目,且為了保持輸入輸出的一致性
print(res)

cursor.close()
conn.close()

if res:
    print('登入成功')

else:
    print('登入失敗')

二 execute()之sql注入

注意:符號--會註釋掉它之後的sql,正確寫法:--後至少有一個任意字元

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

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

#1、sql注入之:使用者存在,繞過密碼
egon' -- 任意字元

#2、sql注入之:使用者不存在,繞過使用者與密碼
xxx' or 1=1 -- 任意字元

解決方法:

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

#改寫為(execute幫我們做字串拼接,我們無需且一定不能再為%s加引號了)
sql="select * from userinfo where name=%s and password=%s" 
#!!!注意%s需要去掉引號,因為pymysql會自動為我們加上
res=cursor.execute(sql,[user,pwd]) 
#pymysql模組自動幫我們解決sql注入的問題,只要我們按照pymysql的規矩來。

三 增、刪、改:conn.commit()

import pymysql

conn = pymysql.connect(host='127.0.0.1', user='root', password='wanjiang', database='db10')
cursor = conn.cursor()

# 執行sql語句

#part1
sql = 'insert into useinfo values("egon","123");'
res = cursor.execute(sql)
print(res)
conn.commit()  # 提交才能成功插入記錄
cursor.close()
conn.close()

# part2
sql = 'insert into useinfo value (%s,%s);'
res = cursor.execute(sql, ('root', '456'))
# 執行sql語句,返回sql影響成功的行數
print(res)
conn.commit()
cursor.close()
conn.close()

# part3
sql = 'insert into useinfo values(%s,%s);'
res = cursor.executemany(sql, [('lxw', '890'), ('tank', '333'), ('justin', '2222')])
print(res)
conn.commit()
cursor.close()
conn.close()

四 查:fetchone,fetchmany,fetchall

import pymysql

conn = pymysql.connect(host='127.0.0.1', user='root', password='wanjiang', database='db10')
cursor = conn.cursor()

# 執行sql語句
sql = 'select * from useinfo;'
rows = cursor.execute(sql)
print(rows)

cursor.scroll(3, mode='absolute')
# 遊標移到第三行開始讀(讀不到第三行)
cursor.scroll(1, mode='relative')
# 相對當前位置移動一行(照著上面來則是從第四行開始讀,讀不到第四行)

res1 = cursor.fetchone()
res2 = cursor.fetchone()
res3 = cursor.fetchone()
res4 = cursor.fetchmany(2)
res5 = cursor.fetchall()
#cursor可當做一個迭代器,當資料取不到後則返回空

print(res1)
print(res2)
print(res3)
print(res4)
print(res5)

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