07 數據庫——pycharm操作數據庫


一、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()
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM