pymysql模組簡單實用
1、安裝pymysql模組
pip3 install pymysql
2、建立連線
與mysql服務端建立連線
conn=pymysql.connect(
host = '127.0.0.1', # ip
port = 3306, #埠
user = 'root', # 資料庫使用者名稱
password = '123', # 資料庫密碼
database = 'egon', # 資料庫名字
charset = 'utf8' # 編碼千萬不要加- 如果寫成了utf-8會直接報錯
autocommit = true # 這個引數配置完成後 增刪改操作都不需要在手動加conn.commit了
3、產生游標物件
cursor = conn.cursor(pymysql.cursors.dictcursor)
# 產生乙個游標物件 以字典的形式返回查詢出來的資料 鍵是表的字段 值是表的字段對應的資訊
# cursor=conn.cursor() #執行完畢返回的結果集預設以元組顯示
4、執行sql語句
#執行sql語句
sql='select * from userinfo where name="%s" and password="%s"' %(user,pwd) #注意%s需要加引號
res=cursor.execute(sql) #執行sql語句,返回sql查詢成功的記錄數目
print(res)
# r1 = cursor.fetchone() #返回一條,游標前進一次
# r2 = cursor.fetchone() #返回一條,游標再前進一次
# r3 = cursor.fetchone()
r = cursor.fetchall() # 直接拉取所有結果
print(r)
cursor.close()
conn.close()
if res:
print('登入成功')
else:
print('登入失敗')
使用者登入案例
import pymysql
# 建立連線
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='quattro!',
database='db1',
charset='utf8',
autocommit=true
# 建立游標
cursor = conn.cursor(pymysql.cursors.dictcursor)
username = input('輸入使用者名稱:').strip()
password = input('輸入密碼:').strip()
sql = 'select * from user where username = %s and password = %s'
res = cursor.execute(sql,(username, password)) #能夠幫你自動過濾特殊符號 避免sql注入的問題
if res:
print(cursor.fetchall())
else:
print('登入失敗')
sql注入
利用注釋等特殊符號,篡改sql語句,從而達到自己的目的
mysql中的注釋: - - #
注意:符號--會注釋掉它之後的sql,正確的語法:--後至少有乙個任意字元
根本原理:就根據程式的字串拼接name='%s',我們輸入乙個***' -- haha,用我們輸入的***加'在程式中拼接成乙個判斷條件name='***' -- haha'
sql注入一:知道使用者名稱,繞過密碼
select * from user where name = 'zjy' - - asldkfjalsdjfad任意字元
sql注入二:不知道使用者名稱,繞過使用者名稱和密碼
select * from user where name = 'zjy' or 1=1 - - alskdjflasjdflajsdlfk任意字元
解決方案:
# 原來是我們對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='localhost',
port=3306,
user='root',
password='123',
database='db1',
charset='utf8',
autocommit=true #如果不加這個需要手動 conn.commit ,否則資料增刪改不了。
# 插入方式一:
# sql='insert into userinfo(name,password) values("root","123456");'
# res=cursor.execute(sql) #執行sql語句,返回sql影響成功的行數
# print(res)
# 插入方式二:
# sql='insert into userinfo(name,password) values(%s,%s);'
# res=cursor.execute(sql,("root","123456")) #執行sql語句,返回sql影響成功的行數
# print(res)
# 插入方式三:
cursor = conn.cursor(pymysql.cursors.dictcursor)
sql = 'insert into user(username, password) values(%s, %s)'
res = cursor.executemany(sql, [('user1','pwd1'),('user2','pwd2')])
# res是受影響的記錄數量
cursor.close()
conn.close()
查:fetchone, fetchall, fetchmany
#執行sql語句
sql='select * from userinfo;'
rows=cursor.execute(sql) #執行sql語句,返回sql影響成功的行數rows,將結果放入乙個集合,等待被查詢
# cursor.scroll(3,mode='absolute') # 相對絕對位置移動
# cursor.scroll(3,mode='relative') # 相對當前位置移動
res1=cursor.fetchone() # 拉取一條資料
res2=cursor.fetchone()
res3=cursor.fetchone()
res4=cursor.fetchmany(2) # 拉取兩條資料
res5=cursor.fetchall() # 拉取全部資料
conn.commit() #提交後才發現表中插入記錄成功,連線時如果寫了 autocommit=true,就不需要這行
獲取插入的最後一條資料的自增id
print(cursor.lastrowid) #在插入語句後檢視
MySQL SQL語句 運算元據庫
運算元據庫 sql語句說明增 create database 資料庫名 create database if not exists 資料庫名 create database if not exists 資料庫名 character set 字符集名 建立資料庫 刪drop database 資料庫名...
python運算元據庫
資料庫的操作在現在的python裡面已經變得十分的好用,有了一套api標準.下面的就是講講如何的去使用這套框架定義.此框架包含以下部分 connect parameters.其中的引數格式如下 dsn 資料來源名稱 user 使用者名稱 可選 password 密碼 可選 host 主機名 可選 d...
python 運算元據庫
目的 通過excel定義檢查指標項,然後通過python讀取指標,通過oracle sqlplus工具去執行獲取具體巡檢結果。unicode utf 8 coding utf 8 import os import sys import xlrd import paramiko reload sys ...