python爬蟲與Django框架vue互動的前後端程式碼詳情(勵志人生網例項)
阿新 • • 發佈:2020-10-07
一 連結、執行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()