資料庫之Python操作MySQL

2022-07-24 05:30:19 字數 2927 閱讀 8613

python操作mysql一共有兩種方式,第一種是用原生模組pymysql和mysqldb,這兩種模組在py2中都支援,但是在py3中只支援pymysql,但是pymysql可以通過pymysql.install_as_mysqldb()的方式構造成和mysqldb一樣的使用;第二種方式是orm框架 sqlachemy。

pip install pymysql

import pymysql

# 增,刪,改除了sql語句不同,使用的方式一致

conn = pymysql.connect(host="

localhost

",user='

root

',password='',database="

db2"

) #連線mysql

cursor =conn.cursor() #建立游標

sql = "

insert into userinfo(username,password) values(%s,%s)

" #sql語句

#r表示執行這條語句受影響的行數

r =cursor.execute(sql ,['wusir','123'])

#r = cursor.executemany(sql ,[('jack','213'),('tom','234')]) #表示插入多條資料,只有在插入資料的時候才使用executemany

conn.commit()   #增刪改執行一定要加conn.commit()

cursor.close() #關閉游標

conn.close()  #關閉連線

# 查

conn = pymysql.connect(host="

localhost

",user='

root

',password='',database="

db2"

)# cursor = conn.cursor(cursor=pymysql.cursors.dictcursor) #使用這種游標查出來的資料是列表套子典

cursor = conn.cursor() #使用這種游標查出來的資料是元祖套元祖

sql = "

select * from userinfo

"cursor.execute(sql)

#cursor.scroll(

1,mode='

relative

') # 讓游標相對當前位置移動

#cursor.scroll(

2,mode='

absolute

') # 讓游標相對絕對位置移動

#result =cursor.fetchone() # 取乙個資料

#print(result)

#result = cursor.fetchmany(4

) #取指定數目的資料

#print(result)

result = cursor.fetchall() #取查出來的所有資料

print(result)

cursor.close()

conn.close()

#ps:每取乙個資料游標就會向下移動一位

# 新插入資料的自增id: cursor.lastrowid

# 如當有乙個主從表時,從表要根據主表的id變化來插入資料,這時可以使用cursor.lastrowid來獲取最新插入的主表id。

寫乙個很簡單的基於mysql的登入程式,資料庫裡面只有乙個user為alex,pwd為123,當使用第一種寫法時會出現mysql注入的情況。

import pymysql

user = input('

>>請輸入使用者名稱:')

pwd = input('

>>請輸入密碼:')

conn = pymysql.connect(host='

127.0.0.1

',user='

root

',password='',database='

db2'

)cursor =conn.cursor()

#第一種寫法(不可以)

sql = "

select * from userinfo where name='%s' and pwd='%s'

"%(user,pwd)

cursor.execute(sql)

res =cursor.fetchone()

print(res)

#第二種寫法(可以)

sql = "select * from userinfo where name=%s and pwd=%s"

cursor.execute(sql,[user,pwd])

res = cursor.fetchone()

print(res)

#第三種寫法(可以)

sql = "select * from userinfo where name=%(u)s and pwd=%(p)s"

cursor.execute(sql,)

res = cursor.fetchone()

print(res)

if

res:

print(

'登陸成功')

else

: print(

'登陸失敗

這就是mysql注入,因為mysql中的注釋是--,使用這種字串拼接會將後面的語句注釋掉,同時1=1成立,這樣就會出現即使沒有這個使用者也會登入成功。

mysql資料庫之python鏈結mysql

使用之前請在命令列pip install pymysql import pymysql 1.建立鏈結 conn pymysql.connect host 127.0.0.1 ip位址 port 3306,埠號 database database name 資料庫名稱 user mysql usern...

Python學習之資料庫操作

在python中,我們可以通過mysqldb這一介面卡連線並運算元據庫。其中有兩個主要的物件connection和cursor,分別用來與資料庫連線和通訊。下面給出乙個與資料庫連線的例項 conn mysqldb.connect host 127.0.0.1 主機名 127.0.0.1 為本機ip ...

python之資料庫操作 sqlite

關於sqlite 不像常見的客戶端 伺服器結構範例,sqlite引擎不是個程式與之通訊的獨立程序,而是連線到程式中成為它的乙個主要部分。所以主要的通訊協議是在程式語言內的直接api呼叫。這在消耗總量 延遲時間和整體簡單性上有積極的作用。整個資料庫 定義 表 索引和資料本身 都在宿主主機上儲存在乙個單...