溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

pymysql怎么操作mysql數(shù)據(jù)庫

發(fā)布時(shí)間:2023-04-18 15:58:41 來源:億速云 閱讀:105 作者:iii 欄目:開發(fā)技術(shù)

本文小編為大家詳細(xì)介紹“pymysql怎么操作mysql數(shù)據(jù)庫”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“pymysql怎么操作mysql數(shù)據(jù)庫”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識吧。

1、pymysql.connent

用法:創(chuàng)建鏈接

語法:conn = pymysql.connect(host=‘127.0.0.1’, port=端口號, user=‘數(shù)據(jù)庫用戶名’, passwd=‘密碼’, db=‘數(shù)據(jù)庫名’)

conn = pymysql.connect(host='127.0.0.1', 
                 port=3306, user='root', passwd='@123456', db='db4')

2、conn.cursor()

用法:創(chuàng)建光標(biāo)

cursor = conn.cursor()

游標(biāo)設(shè)置為字典類型

# 游標(biāo)設(shè)置為字典類型
cursor = conn.cursor("cursor"=pymysql.cursors.DictCursor)

栗子:
sql = "select * from department;"
# 執(zhí)行sql語句的函數(shù),使用下面函數(shù)進(jìn)行拼接,防止SQL注入
cursor.execute(sql)
# cursor.scroll(1,mode='relative')
result = cursor.fetchone()
print(result)
輸出結(jié)果:
{'id': 1, 'title': '財(cái)務(wù)'}

3、cursor.execute()

用法:執(zhí)行sql語句

cursor.execute(sql)

4、cursor.executemany()

用法:批量執(zhí)行sql語句

cursor.executemany(sql,[('銷售'), ('經(jīng)理')])

5、cursor.fetchone()

用法:SQL執(zhí)行select默認(rèn)只是拿一個(gè)結(jié)果,多次執(zhí)行該語句可以依次向下拿數(shù)據(jù)

import  pymysql
# 創(chuàng)建鏈接,跟socket服務(wù)類似
conn = pymysql.connect(host='127.0.0.1', port=3306, 
                 user='root', passwd='@123456', db='db4')
# 創(chuàng)建游標(biāo)(相當(dāng)與創(chuàng)建一個(gè)拿數(shù)據(jù)的手)
cursor = conn.cursor()
# 創(chuàng)建要執(zhí)行的SQL語句
sql = "select * from department;"
# 執(zhí)行sql語句的函數(shù),使用下面函數(shù)進(jìn)行拼接,防止SQL注入
cursor.execute(sql)
result = cursor.fetchone()
print(result)
result = cursor.fetchone()
print(result)
result = cursor.fetchone()
print(result)
# 關(guān)閉鏈接
cursor.close()
conn.close()
·
輸出結(jié)果:
(1, '財(cái)務(wù)')
(2, '公關(guān)')
(3, '測試')

6、cursor.scroll()

用法:注:在fetch數(shù)據(jù)時(shí)按照順序進(jìn)行,可以使用cursor.scroll(num,mode)來移動(dòng)游標(biāo)位置,如:

  • cursor.scroll(1,mode=‘relative’) # 相對當(dāng)前位置移動(dòng)

  • cursor.scroll(2,mode=‘absolute’) # 相對絕對位置移動(dòng)

表結(jié)構(gòu):

pymysql怎么操作mysql數(shù)據(jù)庫

栗子:

1、
cursor.execute(sql)
result = cursor.fetchone()
print(result)
輸出結(jié)果:
(1, '財(cái)務(wù)')
2、
cursor.execute(sql)
cursor.scroll(1,mode='absolute')
result = cursor.fetchone()
print(result)
輸出結(jié)果:
(2, '公關(guān)')
3、
cursor.execute(sql)
cursor.scroll(1,mode='relative')
result = cursor.fetchone()
print(result)
輸出結(jié)果:
(2, '公關(guān)')

7、cursor.fetchmany()

用法:可以設(shè)置返回值的個(gè)數(shù)cursor.fetchmany(num)

cursor.execute(sql)
# cursor.scroll(1,mode='relative')
# result = cursor.fetchone()
# print(result)
result = cursor.fetchmany(2)
print(result)
輸出結(jié)果:
((1, '財(cái)務(wù)'), (2, '公關(guān)'))

8、cursor.fetchall()

用法:顧名思義就是拿到所有的結(jié)果

sql = "select * from department;"
# 執(zhí)行sql語句的函數(shù),使用下面函數(shù)進(jìn)行拼接,防止SQL注入
cursor.execute(sql)
# cursor.scroll(1,mode='relative')
# result = cursor.fetchone()
# print(result)
# result = cursor.fetchmany(2)
# print(result)
result = cursor.fetchall()
print(result)
輸出結(jié)果:
((1, '財(cái)務(wù)'), (2, '公關(guān)'), (3, '測試'), (4, '運(yùn)維'), (5, '銷售'))

9、cursor.lastrowid()

用法:獲取新創(chuàng)建數(shù)據(jù)自增ID,如果新增加了多條數(shù)據(jù)只返回最后插入的那條數(shù)據(jù)的自增id

PS:如果只想一個(gè)一個(gè)拿id只能夠一個(gè)一個(gè)插入

sql = "insert into department(title) values(%s)"

cursor.executemany(sql,[('經(jīng)理')])
# 獲取插入值的自增id
print(cursor.lastrowid)
# 將執(zhí)行的結(jié)果提交到表中,否則表不會(huì)發(fā)生變換
conn.commit()
輸出結(jié)果:
6

10、今日練習(xí)

題目要求:

練習(xí):
    權(quán)限管理
        權(quán)限表:
            1、訂單管理
            2、用戶管理
            3、菜單管理
            4、權(quán)限分配
            5、Bug管理
        用戶表:
            1、蔡徐坤
            2、雞哥
            3、坤哥
        用戶關(guān)系權(quán)限表:
            1    1
            1    2
            2    1
Python實(shí)現(xiàn):
    某個(gè)用戶登入后,可以查看自己的所有權(quán)限

題目答案:

【1、創(chuàng)建權(quán)限表】

CREATE TABLE power (
	pid INT auto_increment PRIMARY KEY,
	purview	CHAR(10)
)ENGINE= INNODB DEFAULT CHARSET= utf8;

【2、創(chuàng)建用戶表】
CREATE TABLE users (
	uid INT auto_increment PRIMARY KEY,
	username	CHAR(10)
)ENGINE= INNODB DEFAULT CHARSET= utf8;

【3、創(chuàng)建用戶權(quán)限關(guān)系表】
CREATE TABLE use_pow (
	upid INT auto_increment PRIMARY KEY,
	power_id INT,
	user_id INT,
	UNIQUE uq_pid_uid(power_id, user_id),
	CONSTRAINT fk_pow FOREIGN KEY (power_id) REFERENCES power(pid),
	CONSTRAINT fk_user FOREIGN KEY (user_id) REFERENCES users(uid)
)ENGINE= INNODB DEFAULT CHARSET= utf8;

py文件:
import pymysql
user = input('請輸入用戶名稱>>>')
# 連接數(shù)據(jù)庫
conn  = pymysql.connect(host='127.0.0.1', port=3306, 
                  user='root', passwd='@123456', db='db_grant')

# 創(chuàng)建光標(biāo)
cursor = conn.cursor()

# 查詢是否存在該用戶
sql = "SELECT uid FROM users WHERE username = %(u)s"

cursor.execute(sql, {'u': user})
# 獲取到用戶的id
uid = cursor.fetchone()
# print(uid[0], type(uid[0]))
if uid:
# 這里的%s如果換成%d就會(huì)報(bào)錯(cuò)因?yàn)閑xecute無論傳入什么類型都要用%s來占位
sql2 = "SELECT purview from power WHERE pid in 
(SELECT power_id FROM use_pow WHERE user_id = %s)"
cursor.execute(sql2, uid[0])
result = cursor.fetchall()
print(result)
else:
print("沒有該用戶")
cursor.close()
conn.close()

讀到這里,這篇“pymysql怎么操作mysql數(shù)據(jù)庫”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI