欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python操作MySQL數(shù)據(jù)庫實例詳解【安裝、連接、增刪改查等】

 更新時間:2020年01月17日 10:07:33   作者:theVicTory  
這篇文章主要介紹了Python操作MySQL數(shù)據(jù)庫,結(jié)合實例形式詳細(xì)分析了Python操作mysql數(shù)據(jù)庫的安裝、連接、增刪改查等相關(guān)實現(xiàn)技巧與注意事項,需要的朋友可以參考下

本文實例講述了Python操作MySQL數(shù)據(jù)庫。分享給大家供大家參考,具體如下:

1、安裝

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

通過pip命令安裝:

pip install mysql-connector-python

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

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)致無法連接,因此注意使用和數(shù)據(jù)庫相兼容的版本。

2、連接

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

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

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

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

# 獲取數(shù)據(jù)庫的cursor
cursor = db.cursor()
# 創(chuàng)建數(shù)據(jù)庫
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')
# 查詢并打印數(shù)據(jù)庫中的所有表
cursor.execute("show tables")
for table in cursor:
  print(table)

4、增刪改

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

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

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

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

# 要執(zhí)行的SQL語句
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īng)的變量名

# 在SQL語句中指明變量名
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ù)組的方式傳給第二個參數(shù)。

通過cursor的rowcount屬性可以返回成功操作的數(shù)據(jù)條數(shù),lastrowid屬性是最后一個成功插入的行的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ù)的方法與插入類似,只需要把對應(yīng)的SQL語句和變量值傳給execute()函數(shù)即可。可以看出MySQL-connector庫的操作是非常貼近原生SQL語言的。

# 修改數(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、查詢

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

# 查詢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

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

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python常見數(shù)據(jù)庫操作技巧匯總》、《Python數(shù)學(xué)運算技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對大家Python程序設(shè)計有所幫助。

相關(guān)文章

  • python 字典有序并寫入json文件過程解析

    python 字典有序并寫入json文件過程解析

    這篇文章主要介紹了python 字典有序并寫入json文件過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • Python中requests、aiohttp、httpx性能比拼

    Python中requests、aiohttp、httpx性能比拼

    本文主要介紹了Python中requests、aiohttp、httpx性能比拼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • python 寫的一個爬蟲程序源碼

    python 寫的一個爬蟲程序源碼

    這篇文章主要介紹了python 寫的一個爬蟲程序源碼,需要的朋友可以參考下
    2016-02-02
  • Python文件操作模擬用戶登陸代碼實例

    Python文件操作模擬用戶登陸代碼實例

    這篇文章主要介紹了Python文件操作模擬用戶登陸代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • 利用Python操作MongoDB數(shù)據(jù)庫的詳細(xì)指南

    利用Python操作MongoDB數(shù)據(jù)庫的詳細(xì)指南

    MongoDB是由C++語言編寫的非關(guān)系型數(shù)據(jù)庫,是一個基于分布式文件存儲的開源數(shù)據(jù)庫系統(tǒng),其內(nèi)容存儲形式類似JSON對象,下面這篇文章主要給大家介紹了關(guān)于利用Python操作MongoDB數(shù)據(jù)庫的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • Python如何利用opencv實現(xiàn)手勢識別

    Python如何利用opencv實現(xiàn)手勢識別

    這篇文章主要介紹了Python如何利用opencv實現(xiàn)手勢識別,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙可以參考一下
    2022-05-05
  • 用Python實現(xiàn)隨機(jī)森林算法的示例

    用Python實現(xiàn)隨機(jī)森林算法的示例

    這篇文章主要介紹了用Python實現(xiàn)隨機(jī)森林算法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • 利用Python的PyPDF2庫提取pdf中的文字

    利用Python的PyPDF2庫提取pdf中的文字

    PyPDF2是一個用于處理PDF文件的Python庫,它提供了許多用于讀取和操作PDF文件的功能,對于需要處理PDF文件的Python應(yīng)用程序,PyPDF2是一個非常實用的工具庫,本文將給大家詳細(xì)介紹一下如何通過Python的PyPDF2庫提取pdf中的文字,需要的朋友可以參考下
    2023-05-05
  • 簡單了解Python write writelines區(qū)別

    簡單了解Python write writelines區(qū)別

    這篇文章主要介紹了簡單了解Python write writelines區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • Python讀取CSV文件的4種方法與注意事項

    Python讀取CSV文件的4種方法與注意事項

    在python里面,讀取或?qū)懭隿sv文件時是經(jīng)常遇到的一個需求,這篇文章主要給大家介紹了關(guān)于Python讀取CSV文件的4種方法與注意事項,需要的朋友可以參考下
    2023-10-10

最新評論