溫馨提示×

溫馨提示×

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

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

如何使用Python玩轉(zhuǎn)MySQL數(shù)據(jù)庫

發(fā)布時間:2022-05-09 13:39:56 來源:億速云 閱讀:199 作者:zzz 欄目:大數(shù)據(jù)

這篇“如何使用Python玩轉(zhuǎn)MySQL數(shù)據(jù)庫”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“如何使用Python玩轉(zhuǎn)MySQL數(shù)據(jù)庫”文章吧。

一、背景

我是在Anaconda notebook中進(jìn)行連接實驗的,環(huán)境Python3.6,當(dāng)然也可以在Python Shell里面進(jìn)行操作。

最常用也最穩(wěn)定的用于連接MySQL數(shù)據(jù)庫的python庫是PyMySQL。

二、基本操作

1、安裝PyMySQL庫

最簡單的方式:

在命令行輸入 pip install pymysql

或者:

下載whl文件[1]進(jìn)行安裝,安裝過程自行百度。

2、安裝MySQL數(shù)據(jù)庫

MySQL數(shù)據(jù)庫有兩種:

MySQLMariaDB

我用的是MariaDB,它是MySQL的一個分支。

兩者在絕大部分性能上是兼容的,使用起來感覺不到啥區(qū)別。

給出下載地址:MySQL[2],MariaDB[3],安裝過程很簡單,一路Next Step,不過要記好密碼。

有個小插曲,MySQL和MariaDB相當(dāng)于姐姐妹妹的關(guān)系,兩者由同一個人(Widenius)創(chuàng)建的。

MySQL被Oracle收購后,Widenius先生覺得不爽,于是搞了個MariaDB,可以完全替代MySQL。

大牛就是任性。

3、SQL基本語法

下面要用SQL的表創(chuàng)建、查詢、數(shù)據(jù)插入等功能,這里簡要介紹一下SQL語言的基本語句。

  • 查看數(shù)據(jù)庫:SHOW DATABASES;

  • 創(chuàng)建數(shù)據(jù)庫:CREATE DATEBASE 數(shù)據(jù)庫名稱;

  • 使用數(shù)據(jù)庫:USE 數(shù)據(jù)庫名稱;

  • 查看數(shù)據(jù)表:SHOW TABLES;

  • 創(chuàng)建數(shù)據(jù)表:CREATE TABLE 表名稱(列名1 (數(shù)據(jù)類型1),列名2 (數(shù)據(jù)類型2));

  • 插入數(shù)據(jù):INSERT INTO 表名稱(列名1,列名2) VALUES(數(shù)據(jù)1,數(shù)據(jù)2);

  • 查看數(shù)據(jù):SELECT * FROM 表名稱;

  • 更新數(shù)據(jù):UPDATE 表名稱 SET 列名1=新數(shù)據(jù)1,列名2=新數(shù)據(jù)2 WHERE 某列=某數(shù)據(jù);

4、連接數(shù)據(jù)庫

安裝好必要得文件和庫后,接下來正式開始連接數(shù)據(jù)庫吧,雖然神秘卻不難哦!

#首先導(dǎo)入PyMySQL庫
import pymysql
#連接數(shù)據(jù)庫,創(chuàng)建連接對象connection
#連接對象作用是:連接數(shù)據(jù)庫、發(fā)送數(shù)據(jù)庫信息、處理回滾操作(查詢中斷時,數(shù)據(jù)庫回到最初狀態(tài))、創(chuàng)建新的光標(biāo)對象
connection = pymysql.connect(host = 'localhost' #host屬性
                            user = 'root' #用戶名
                            password = '******'  #此處填登錄數(shù)據(jù)庫的密碼
                            db = 'mysql' #數(shù)據(jù)庫名
                            )

執(zhí)行這段代碼就連接好了!

5、增刪改查操作

首先來查看一下有哪些數(shù)據(jù)庫:

#創(chuàng)建光標(biāo)對象,一個連接可以有很多光標(biāo),一個光標(biāo)跟蹤一種數(shù)據(jù)狀態(tài)。
#光標(biāo)對象作用是:、創(chuàng)建、刪除、寫入、查詢等等
cur = connection.cursor()
#查看有哪些數(shù)據(jù)庫,通過cur.fetchall()獲取查詢所有結(jié)果
print(cur.fetchall())

打印出所有數(shù)據(jù)庫:

(('information_schema',),
('law',),
('mysql',),
('performance_schema',),
('test',))

在test數(shù)據(jù)庫里創(chuàng)建表:

#使用數(shù)據(jù)庫test
cur.execute('USE test')
#在test數(shù)據(jù)庫里創(chuàng)建表student,有name列和age列
cur.execute('CREATE TABLE student(name VARCHAR(20),age TINYINT(3))')

向數(shù)據(jù)表student中插入一條數(shù)據(jù):

sql = 'INSERT INTO student (name,age) VALUES (%s,%s)'
cur.execute(sql,('XiaoMing',23))

查看數(shù)據(jù)表student內(nèi)容:

cur.execute('SELECT * FROM student')
print(cur.fetchone())

打印輸出為:('XiaoMing', 23)

Bingo!是我們剛剛插入的一條數(shù)據(jù)

最后,要記得關(guān)閉光標(biāo)和連接:

#關(guān)閉連接對象,否則會導(dǎo)致連接泄漏,消耗數(shù)據(jù)庫資源
connection.close()
#關(guān)閉光標(biāo)
cur.close()

OK了,整個流程大致如此。

當(dāng)然這里都是很基礎(chǔ)的操作,更多的使用方法需要在PyMySQL官方文檔[4]里去尋找。

三、導(dǎo)入大數(shù)據(jù)文件

以csv文件為例,csv文件導(dǎo)入數(shù)據(jù)庫一般有兩種方法:

1、通過SQL的insert方法一條一條導(dǎo)入,適合數(shù)據(jù)量小的CSV文件,這里不做贅述。

2、通過load data方法導(dǎo)入,速度快,適合大數(shù)據(jù)文件,也是本文的重點。

樣本CSV文件如下:

如何使用Python玩轉(zhuǎn)MySQL數(shù)據(jù)庫

總體工作分為3步:

1、用python連接mysql數(shù)據(jù)庫;

2、基于CSV文件表格字段創(chuàng)建表;

3、使用load data方法導(dǎo)入CSV文件內(nèi)容。

sql的load data語法簡介:

LOAD DATA LOCAL INFILE 'csv_file_path' INTO TABLE table_name FIELDS TERMINATED BY ',' LINES TERMINATED BY '\\r\\n' IGNORE 1 LINES

csv_file_path 指文件絕對路徑 table_name指表名稱 FIELDS TERMINATED BY ','指以逗號分隔 LINES TERMINATED BY '\\r\\n'指換行 IGNORE 1 LINES指跳過第一行,因為第一行是表的字段名

下面給出全部代碼:

#導(dǎo)入pymysql方法
import pymysql


#連接數(shù)據(jù)庫
config = {:'',
         :3306,
         :'username',
         :'password',
         :'utf8mb4',
         :1
         }
conn = pymysql.connect(**config)
cur = conn.cursor()


#load_csv函數(shù),參數(shù)分別為csv文件路徑,表名稱,數(shù)據(jù)庫名稱
def load_csv(csv_file_path,table_name,database='evdata'):
   #打開csv文件
   file = open(csv_file_path, 'r',encoding='utf-8')
   #讀取csv文件第一行字段名,創(chuàng)建表
   reader = file.readline()
   b = reader.split(',')
   colum = ''
   for a in b:
       colum = colum + a + ' varchar(255),'
   colum = colum[:-1]
   #編寫sql,create_sql負(fù)責(zé)創(chuàng)建表,data_sql負(fù)責(zé)導(dǎo)入數(shù)據(jù)
   create_sql = 'create table if not exists ' + table_name + ' ' + '(' + colum + ')' + ' DEFAULT CHARSET=utf8'
   data_sql = "LOAD DATA LOCAL INFILE '%s' INTO TABLE %s FIELDS TERMINATED BY ',' LINES TERMINATED BY '\\r\\n' IGNORE 1 LINES" % (csv_filename,table_name)

   #使用數(shù)據(jù)庫
   cur.execute('use %s' % database)
   #設(shè)置編碼格式
   cur.execute('SET NAMES utf8;')
   cur.execute('SET character_set_connection=utf8;')
   #執(zhí)行create_sql,創(chuàng)建表
   cur.execute(create_sql)
   #執(zhí)行data_sql,導(dǎo)入數(shù)據(jù)
   cur.execute(data_sql)
   conn.commit()
   #關(guān)閉連接
   conn.close()
   cur.close()

以上就是關(guān)于“如何使用Python玩轉(zhuǎn)MySQL數(shù)據(jù)庫”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道。

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

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

AI