pymysql

python中pymysql模塊

# 實現:使用Python實現用戶登陸,若是用戶存在則登陸成功(假設該用戶已在數據庫中)


import pymysql
user = input('請輸入用戶名:')

pwd = input('請輸入密碼:')



# 1.鏈接
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='', db='db8', charset='utf8')


# 2.建立遊標
cursor = conn.cursor()

#注意%s須要加引號
sql = "select * from userinfo where username='%s' and pwd='%s'" %(user, pwd)
print(sql)

# 3.執行sql語句
cursor.execute(sql)

result=cursor.execute(sql) #執行sql語句,返回sql查詢成功的記錄數目
print(result)


# 關閉鏈接,遊標和鏈接都要關閉
cursor.close()
conn.close()

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

2、execute()之sql注入

最後那一個空格,在一條sql語句中若是遇到select * from userinfo where username='app01' -- asadasdas' and pwd='' 則--以後的條件被註釋掉了(注意--後面還有一個空格)

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

#二、sql注入之:用戶不存在,繞過用戶與密碼
xxx' or 1=1 -- 任意字符

#解決
# 原來是咱們對sql進行字符串拼接
# sql="select * from userinfo where name='%s' and password='%s'" %(username,pwd)
# print(sql)
# result=cursor.execute(sql)

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

3、增 刪 改 :必定要commit

import pymysql

# use = input('請輸入用戶名:')
# pwd = input('請輸入密碼:')
conn = pymysql.connect( host='localhost',
                 user='root',
                 password="123",
                 database='db8',
                 port=3306,
                 charset='utf8')
cursor = conn.cursor()
# sql = 'select * from userinfo where  name = %(username)s and pwd = %(pwd)s ;'
# sql = 'insert into userinfo(name,pwd) values(%s,%s)'
# sql = 'update userinfo set name = %s where id=6'

sql = 'truncate table userinfo'
print(sql)

#增
'''插入一條數據用 execute'''
# res = cursor.execute(sql,[use,pwd])

'''插入多條數據使用executmany'''
# res = cursor.executemany(sql,[('李四','88888888'),('王五','666666')])

#改

# res = cursor.execute(sql,[use])
#刪
res = cursor.execute(sql)
print(res)


'''注意這裏-增--刪--改- 操做的時候必定要加commit否則是寫不進數據庫的'''
conn.commit()
cursor.close()

conn.close()

4、查:fetchone,fetchmany,fetchall

遊標移動位置:scroll(int,mode='relative')
relative 相對於本身進行移動
absolute 相對於左上角原點進行移動python

import pymysql

conn = pymysql.connect( host='localhost',
                 user='root',
                 password="123",
                 database='db8',
                 port=3306,
                 charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)   # 本來返回的數據是一個大元組裏有多個小元組,這裏設置了就變成了一個列表裏有多個字典

#查
sql = 'select * from userinfo'
cursor.execute(sql)   # 執行命令
# row= cursor.fetchone()   #返回的結果  獲取下一行數據,以第一行爲爲首行
# print(row)
# row= cursor.fetchone()
# print(row)
# row = cursor.fetchall()   #獲取所有數據
row = cursor.fetchmany(8)    # 獲取多條數據,默認爲0只獲取第一條數據,加了數值就是獲取幾條數據,若是值比數據的條數大就獲取所有
#-1不獲取最後一條數據
#-2不獲取最後兩條數據


'''遊標移動位置'''
cursor.scroll(2,mode='absolute')    # 以左上角的原點爲參照物進行移動,0爲第一行的開始位置
row = cursor.fetchone()
print(row)
cursor.scroll(-1,mode='relative')  #向對於自己進行移動,負值爲向上,正值爲向下
row = cursor.fetchone()

print(row)


cursor.close()  #關閉遊標
conn.close()    #關閉鏈接
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息