mysql之pymysql

pymysql模塊

#安裝
pip3 install pymysql

連接、執行sql、關閉遊標mysql

import pymysql
#連接
conn=pymysql.connect(
  host='localhost',
  user='root',
  password='123',
  database='egon',
  charset='utf8')
#遊標
# cursor=conn.cursor() #執行完畢返回的結果集默認以元組顯示
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)  # 以字典的方式顯示數據

# pymysql操做數據庫
#執行sql語句
user = input(">>>:").strip()
pwd = input(">>>:").strip()
sql='select * from userinfo where name="%s" and password="%s"' %(user,pwd) #注意%s須要加引號

rows=cursor.execute(sql) #執行sql語句,返回sql查詢成功的記錄數目
# 獲取真實數據cursor.fetchone(),cursor.fetchall(),cursor.fetchmany(),相似管道取值,獲取一條,全部,多條

cursor.scroll(1,'relative')  # 相對移動
cursor.scroll(3,'absolute')  # 絕對移動


cursor.close()
conn.close()

sql注入問題sql

# 不要手動去拼接查詢的sql語句
username = input(">>>:").strip()
password = input(">>>:").strip()
sql = "select * from user where username='%s' and password='%s'"%(username,password)

# 用戶名正確
username >>>: abc' -- jjsakfjjdkjjkjs
# 用戶名密碼都不對的狀況
username >>>: xxx' or 1=1 -- asdjkdklqwjdjkjasdljad
password >>>: ''

解決方法:
# 原來是咱們對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的規矩來

增刪改數據庫

# 增
sql = "insert into user(username,password) values(%s,%s)"
rows = cursor.excute(sql,('jason','123'))

# 修改
sql = "update user set username='jasonDSB' where id=1"
rows = cursor.excute(sql)

"""
增和改單單執行excute並不會真正影響到數據,須要再執行conn.commit()才能夠完成真正的增改
"""

# 一次插入多行記錄
res = cursor,excutemany(sql,[(),(),()]

conn.commit() #提交後才發現表中插入記錄成功

查:fetchone,fetchmany,fetchallfetch

import pymysql



conn = pymysql.connect(
    host="127.0.0.1",
    port=3306,
    user="root",
    password="",
    database="day41",
    charset="utf8"
)


cursor = conn.cursor() # 獲取遊標,執行完畢的結果以元祖顯示
# cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

sql = "select * from userinfo"
rows = cursor.execute(sql)

res1 = cursor.fetchone()
res2 = cursor.fetchone()
res3 = cursor.fetchone()
res4 = cursor.fetchmany(2)
res5 = cursor.fetchall()
print(res1)
print(res2)
print(res3)
print(res4)
print(res5)

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

相關文章
相關標籤/搜索