Python操作MySQL數(shù)據(jù)庫(kù)實(shí)例分析

本篇內(nèi)容主要講解“Python操作MySQL數(shù)據(jù)庫(kù)實(shí)例分析”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Python操作MySQL數(shù)據(jù)庫(kù)實(shí)例分析”吧!

創(chuàng)新互聯(lián)公司專(zhuān)注于三沙企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開(kāi)發(fā),商城網(wǎng)站制作。三沙網(wǎng)站建設(shè)公司,為三沙等地區(qū)提供建站服務(wù)。全流程定制開(kāi)發(fā),專(zhuān)業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)公司專(zhuān)業(yè)和態(tài)度為您提供的服務(wù)

1、安裝

通過(guò)Python連接MySQL數(shù)據(jù)庫(kù)有很多庫(kù),這里使用官方推薦的MySQL Connector/Python庫(kù),其官網(wǎng)為:https://dev.mysql.com/doc/connector-python/en/。

通過(guò)pip命令安裝:

pip install mysql-connector-python

默認(rèn)安裝的是最新的版本,我安裝的是8.0.17,對(duì)應(yīng)MySQL的8.0版本。MySQL統(tǒng)一了其相關(guān)工具的大版本號(hào),必須相同或更高才可以兼容。例如我使用的是MySQL8.0,如果使用低于8的mysql-connector就會(huì)報(bào)錯(cuò)。事實(shí)上也是這樣,在某些舊的文檔中提示安裝pip install mysql-connector,就會(huì)安裝較低的版本,在連接MySQL時(shí),會(huì)報(bào)錯(cuò)如下:

mysql.connector.errors.NotSupportedError: Authentication plugin 'caching_sha2_password' is not supported

這是由于mysql8.0使用了Use Strong Password Encryption for Authentication即強(qiáng)密碼加密,而低版本的mysql-connector采用舊的mysql_native_password加密方式,導(dǎo)致無(wú)法連接,因此注意使用和數(shù)據(jù)庫(kù)相兼容的版本。

2、連接

可以通過(guò)connector類(lèi)的connect()方法進(jìn)行數(shù)據(jù)庫(kù)的連接,傳入服務(wù)器、端口號(hào)、用戶(hù)名、密碼、數(shù)據(jù)庫(kù)等參數(shù),其中服務(wù)器與端口號(hào)可省略,默認(rèn)為localhost:3306。

import mysql.connectordb = mysql.connector.connect(  host='localhost',  port='3306',  user="root",  password="123456",  database="test")

3、數(shù)據(jù)庫(kù)、表操作

對(duì)數(shù)據(jù)庫(kù)、數(shù)據(jù)表的操作屬于模式定義語(yǔ)言(DDL),所有DDL語(yǔ)句的執(zhí)行都是依賴(lài)于一個(gè)叫cursor的數(shù)據(jù)結(jié)構(gòu)進(jìn)行操作的。通過(guò)從connect對(duì)象中獲取cursor對(duì)象后就可以進(jìn)行數(shù)據(jù)庫(kù)、表的相關(guān)操作了。例如創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)、數(shù)據(jù)表

# 獲取數(shù)據(jù)庫(kù)的cursorcursor = db.cursor()# 創(chuàng)建數(shù)據(jù)庫(kù)cursor.execute("CREATE DATABASE mydatabase")# 創(chuàng)建數(shù)據(jù)表dbcursor.execute("CREATE TABLE customers (name varchar(255),address varchar(255))")# 修改表操作dbcursor.execute('ALTER TABLE customers ADD COLUMN id INT PRIMARY KEY AUTO_INCREMENT')# 查詢(xún)并打印數(shù)據(jù)庫(kù)中的所有表cursor.execute("show tables")for table in cursor:  print(table)

4、增刪改

插入、刪除、修改操作依舊是通過(guò)cursor對(duì)象來(lái)實(shí)現(xiàn),通過(guò)cursor的execute()方法執(zhí)行SQL操作,第一個(gè)參數(shù)是要執(zhí)行的SQL語(yǔ)句,第二個(gè)參數(shù)是語(yǔ)句中要填充的變量。

在執(zhí)行完所有的SQL操作后記得要通過(guò)數(shù)據(jù)庫(kù)對(duì)象的commit()將操作事務(wù)提交到數(shù)據(jù)庫(kù),如果需要撤銷(xiāo)則通過(guò)rollback()方法回滾操作。

SQL語(yǔ)句中的變量可以用%s的形式作為占位符,然后再以python中元組的形式在執(zhí)行時(shí)將變量填入,如下所示:

值得注意的是無(wú)論是什么類(lèi)型的數(shù)據(jù)在傳入時(shí)都被當(dāng)做字符串類(lèi)型,然后在執(zhí)行SQL操作時(shí)會(huì)將字符串轉(zhuǎn)化為相應(yīng)的類(lèi)型,因此此處的占位符都是%s,而沒(méi)有%d、%f等。

# 要執(zhí)行的SQL語(yǔ)句sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"# 以元組的形式填入數(shù)據(jù)val = ('Mike', 'Main street 20')# 執(zhí)行操作cursor.execute(sql, val)# 提交事務(wù)db.commit()

也可以用python中字典的形式填充變量,在SQL語(yǔ)句中的占位符需要使用對(duì)應(yīng)的變量名

# 在SQL語(yǔ)句中指明變量名sql = "INSERT INTO customers (name, address) VALUES (%(name)s, %(address)s)"# 以字典的形式填入數(shù)據(jù)val = {  'name': 'Alice',  'address': 'Center street 22'}cursor.execute(sql, val)

如果需要一次插入多條數(shù)據(jù),可以使用executemany()方法,將多條數(shù)據(jù)以數(shù)組的方式傳給第二個(gè)參數(shù)。

通過(guò)cursor的rowcount屬性可以返回成功操作的數(shù)據(jù)條數(shù),lastrowid屬性是最后一個(gè)成功插入的行的id

sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"# 以數(shù)組的形式填充數(shù)據(jù)val = [ ('Peter', 'Lowstreet 4'), ('Amy', 'Apple st 652'), ('Hannah', 'Mountain 21'),]cursor.executemany(sql, val)print("成功插入%d條數(shù)據(jù),最后一條的id為:%d" % (cursor.rowcount, cursor.lastrowid))

修改、刪除數(shù)據(jù)的方法與插入類(lèi)似,只需要把對(duì)應(yīng)的SQL語(yǔ)句和變量值傳給execute()函數(shù)即可??梢钥闯鯩ySQL-connector庫(kù)的操作是非常貼近原生SQL語(yǔ)言的。

# 修改數(shù)據(jù)sql = "UPDATE customers SET address=%s WHERE name=%s"val = ('Center street 21', 'Mike')cursor.execute(sql, val)# 刪除數(shù)據(jù)sql = "DELETE FROM customers WHERE name=%s"val = ('Hannah',)cursor.execute(sql, val)

5、查詢(xún)

執(zhí)行查詢(xún)操作和之前類(lèi)似,都是通過(guò)execute()執(zhí)行對(duì)應(yīng)的SQL語(yǔ)句,在執(zhí)行時(shí)將相應(yīng)的數(shù)據(jù)填入即可。查詢(xún)結(jié)束后,結(jié)果集會(huì)保存在cursor當(dāng)中,可以直接把cursor當(dāng)作迭代器iterator來(lái)進(jìn)行展開(kāi)取得結(jié)果集中每條數(shù)據(jù)的對(duì)應(yīng)字段。也可以通過(guò)cursor的fetchall()、fetchone()方法取得所有或一條結(jié)果集。

# 查詢(xún)customers表中id介于6到8之間的數(shù)據(jù)并返回name、address字段query = "SELECT name,address FROM customers WHERE id BETWEEN %s AND %s"cursor.execute(query, (6, 8))# 循環(huán)取出結(jié)果集中的每條數(shù)據(jù)并打印for (name, address) in cursor:  print("%s家的地址是%s" % (name, address))# 輸出結(jié)果為:# Peter家的地址是Lowstreet 4# Amy家的地址是Apple st 652# Hannah家的地址是Mountain 21

通過(guò)原生的SQL語(yǔ)句可以進(jìn)行更為復(fù)雜的查詢(xún)操作,例如通過(guò)where設(shè)置查詢(xún)條件、Order by進(jìn)行字段排序、Limit設(shè)置返回結(jié)果條數(shù)、OFFSET查詢(xún)結(jié)果集的偏移、Join進(jìn)行表連接操作

到此,相信大家對(duì)“Python操作MySQL數(shù)據(jù)庫(kù)實(shí)例分析”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!

文章標(biāo)題:Python操作MySQL數(shù)據(jù)庫(kù)實(shí)例分析
本文網(wǎng)址:http://muchs.cn/article30/pihsso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、域名注冊(cè)網(wǎng)站營(yíng)銷(xiāo)、網(wǎng)站設(shè)計(jì)、微信公眾號(hào)、網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化