利用PyMySQL模組運算元據庫

2022-07-01 03:39:10 字數 3601 閱讀 8703

import pymysql

# 建立鏈結得到乙個鏈結物件

conn = pymysql.connect(

host="127.0.0.1", # 資料庫伺服器主機位址

user="root", # 使用者名稱

password="root", # 密碼

database="test", #資料庫名稱

port=3306, # 埠號 可選 整型

charset="utf8" # 編碼 可選

)

和命令列一直的是是要指定ip埠,使用者授權,不過使用者要操作的資料庫必須要在pymysql連線之前就要存在,不然就要報錯。

,模擬命令列,登入命令列之後會有mysql>的提示符提示你進行操作,用**運算元據庫需要獲得相應的游標,傳入的pymysql.cursors.dictcursor引數是指定返回的結果是字典型別的資料,pymysql會給字典加上字典容器,最後返回的是列表,列表的元素時字典,字典的鍵值是對應的字段和資料

cursor = conn.cursor(pymysql.cursors.dictcursor)  # 將查詢結果做成字典的格式
我們通常將sql語句放在字串中,比如

select_sql = ""select * from table_name"" # 要在sql語句中指定資料表了,要不然查不到資料

insert_sql = "insert into table_name( name,age) values(%s,%s)"%("ruhai",18)

updata_sql = "update user set username='superamdin' where name = admin"

我們將寫好的sql語句交給cursor.execute()來執行,就相當於你把命令敲在命令列中並敲了一下回車,得到sql語句的執行結果。

cursor.execute(select_sql)

cursor.commit() # 因為pymysql 模組預設是啟用事務的 你的sql語句 如果不提交 相當於沒有執行

我們用乙個變數值來獲得查詢的結果

res = cursor.execute(select_sql)
直接列印可以得到結果的條目數

print(res)
cursor.fetchone()

cursor.fetchall()

在資料庫中,游標是乙個十分重要的概念。游標提供了一種對從表中檢索出的資料進行操作的靈活手段,就本質而言,游標實際上是一種能從包括多條資料記錄的結果集中每次提取一條記錄的機制。游標總是與一條sql 查詢語句相關聯因為游標由結果集(可以是零條、一條或由相關的選擇語句檢索出的多條記錄)和結果集中指向特定記錄的游標位置組成。當決定對結果集進行處理時,必須宣告乙個指向該結果集的游標。如果曾經用c 語言寫過對檔案進行處理的程式,那麼游標就像您開啟檔案所得到的檔案控制代碼一樣,只要檔案開啟成功,該檔案控制代碼就可代表該檔案。對於游標而言,其道理是相同的。

cursor.scroll(1,mode='relative')  # 相對當前位置移動【1:表示向下移動一行,-1:表示向上移動一行】

cursor.scroll(1,mode='absolute') # 相對絕對位置移動 【1:表示向上移動一行,-1:表示向下移動一行】

來看下面的**

username=input()

password =input()

# 正常構造語句的情況

sql = "select user,pwd from user where user='%s' and pwd='%s'" % (username,password)

row_count = cursor.execute(sql)

其實使用者可以這樣輸入實現免帳號登入:

username: 『or 1 = 1 –-

password:

如若沒有做特殊處理,那麼這個非法使用者直接登陸進去了.

當輸入了上面的使用者名稱和密碼,服務端的sql就變成:

sql = "select user,pwd from user where user=『'or 1 = 1 –-' and pwd='%s'"
因為條件後面username=」or 1=1使用者名稱等於 空 或1=1 那麼這個條件一定會成功;然後後面加兩個-,這意味著注釋,它將後面的語句注釋,讓他們不起作用,這樣語句永遠都能正確執行,使用者輕易騙過系統,獲取合法身份。

#執行引數化查詢

row_count=cursor.execute("select user,pwd from user where user='%s' and pwd='%s'" ,(username,password))

#execute()函式本身就有接受sql語句變數的引數位,只要正確的使用(直白一點就是:使用」逗號」,而不是」百分號」)就可以對傳入的值進行correctly轉義,從而避免sql注入的發生。

小明有100塊 準備給小花轉50,如果這個時候突然發生了一些事情導致這個資料值存成功了一半,把小明的錢從系統中扣件掉了,但是沒有給小花加上去,那麼就會造成資料的不一致,這個時候應該加上容錯機制提高程式的健壯性,和資料的安全。

try:

cursor.execute("update moneytable set money = money - 50 where name = '小明'")

#如果小花的賬戶出問題了 無法更新資料 那就需要回滾

cursor.execute("update moneytable set money = money + 50 where name = '小花'")

conn.commit()

except:

conn.rollback()

cursor.close()

conn.close()

import pymysql

conn = pymysql.connect(

host="127.0.0.1",

user="root",

password="admin",

database="day42",

port=3306,

charset="utf8"

)cursor = conn.cursor(pymysql.cursors.dictcursor)

sql = "insert into user(username,pwd) values(%s,%s)"

try:

cursor.execute(sql,args= (user,name))

conn.commit()

except:

conn.rollback()

cursor.close()

conn.close()

pymysql模組運算元據庫

pymysql模組是python運算元據庫的乙個模組 connect 建立資料庫鏈結,引數是連線資料庫需要的連線引數 使用方式 模組名稱.connect 引數 host 資料庫ip port 資料庫埠 user 資料庫使用者名稱 passwd 資料庫密碼 db 資料庫名稱 charset 資料庫編碼...

python 模組 pymysql運算元據庫

pymysql是乙個模組,可讓python操作mysql 把pymysql模組匯入進來 先讓python可以連線上伺服器,並明確對伺服器上的哪乙個資料庫進行操作 從mysql模組中,匯入了connect函式 執行connect函式,傳入引數,最終得到乙個與mysql資料庫的連線物件 游標物件是我們執...

呼叫pymysql模組運算元據庫

1 建立資料庫表 1 defcreate table tb name 2import pymysql 匯入模組3 連線資料庫 4 db pymysql.connect localhost root 123 zabbix db 5 建立游標物件 工具 6 cursor db.cursor 7 sql語...