一、pycharm查詢數據庫
1.下載pymysql模塊
2.查詢數據庫
# 模塊:pymysql 需要下載 import pymysql conn = pymysql.connect( host = '127.0.0.1', port = 3306, user = 'root', password = '123', database = 'day38', #要打開那個數據庫 charset = 'utf8' # 編碼千萬不要加- 如果寫成了utf-8會直接報錯 ) cursor = conn.cursor(pymysql.cursors.DictCursor) # 產生一個游標對象 以字典的形式返回查詢出來的數據, 鍵是表的字段,值是表的字段對應的信息 sql = 'select * from teacher' cursor.execute(sql) # 執行傳入的sql語句 # print(res) # res是執行語句返回的數據條數,沒屌用 print(cursor.fetchone()) # 只獲取一條數據,讀表中第一行數據 print(cursor.fetchone()) # 只獲取一條數據 print(cursor.fetchone()) # 只獲取一條數據 cursor.scroll(2,'absolute') # 控制光標移動 absolute相對於起始位置,往后移動幾位,也就是前幾條不讀 # cursor.scroll(1,'relative') # relative相對於當前位置,往后移動幾位,也就是跳過幾條不讀 print(cursor.fetchall()) # 獲取所有的數據 返回的結果是一個列表 ''' {'tid': 1, 'tname': '張磊老師'} {'tid': 2, 'tname': '李平老師'} {'tid': 3, 'tname': '劉海燕老師'} [{'tid': 3, 'tname': '劉海燕老師'}, {'tid': 4, 'tname': '朱雲海老師'}, {'tid': 5, 'tname': '李傑老師'}] '''
二、sql注入問題
1.sql注入: 就是利用注釋等具有特殊意義的符號,來完成一些騷操作,破解mysql驗證
最后那一個空格,在一條sql語句中如果遇到select * from t1 where id > 3 -- and name='egon';則--之后的條件被注釋掉了 #1、sql注入之:用戶存在,繞過密碼 egon' -- 任意字符 #2、sql注入之:用戶不存在,繞過用戶與密碼 xxx' or 1=1 -- 任意字符
2.解決注入問題
# 原來是我們對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的規矩來。
3.完整代碼演示
import pymysql conn = pymysql.connect( host = '127.0.0.1', port = 3306, user = 'root', password = '123', database = 'day38', charset = 'utf8', # 編碼千萬不要加- 如果寫成了utf-8會直接報錯 autocommit = True # 這個參數配置完成后 增刪改操作都不需要在手動加conn.commit了 ) cursor = conn.cursor(pymysql.cursors.DictCursor) username = input('username>>>:') password = input('password>>>:') sql = "select * from user where name =%s and password = %s" print(sql) res = cursor.execute(sql,(username,password)) # 能夠幫你自動過濾特殊符號 避免sql注入的問題 # execute 能夠自動識別sql語句中的%s 幫你做替換 if res: print(cursor.fetchall()) else: print('用戶名或密碼錯誤') """ 后續寫sql語句 不要手動拼接關鍵性的數據 而是讓excute幫你去做拼接(將spl末尾的username,password放到cursor.execute()里面) """
三、mysql的增刪改
import pymysql conn = pymysql.connect( host = '127.0.0.1', port = 3306, user = 'root', password = '123', database = 'day38', charset = 'utf8', # 編碼千萬不要加- 如果寫成了utf-8會直接報錯 autocommit = True # 這個參數配置完成后 增刪改操作都不需要在手動加conn.commit了 ) cursor = conn.cursor(pymysql.cursors.DictCursor) # sql = 'insert into user(name,password) values("jerry","666")' # sql = 'update user set name = "jasonhs" where id = 1' sql = 'delete from user where id = 6' cursor.execute(sql) # conn.commit() #上面配置后這里就不需要了 """ 增刪改操作 都必須加一句 conn.commit()提交操作 """

import pymysql #鏈接 conn=pymysql.connect(host='localhost',user='root',password='123',database='egon') #游標 cursor=conn.cursor() #執行sql語句 #part1 # sql='insert into userinfo(name,password) values("root","123456");' # res=cursor.execute(sql) #執行sql語句,返回sql影響成功的行數 # print(res) #part2 # sql='insert into userinfo(name,password) values(%s,%s);' # res=cursor.execute(sql,("root","123456")) #執行sql語句,返回sql影響成功的行數 # print(res) #part3 sql='insert into userinfo(name,password) values(%s,%s);' res=cursor.executemany(sql,[("root","123456"),("lhf","12356"),("eee","156")]) #執行sql語句,返回sql影響成功的行數 print(res) conn.commit() #提交后才發現表中插入記錄成功 cursor.close() conn.close()