python運算元據庫語句 Python運算元據庫

2021-10-11 09:41:55 字數 3994 閱讀 6534

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 ...