官术网_书友最值得收藏!

1.2 數(shù)據(jù)庫中的數(shù)據(jù)

目前,常見的數(shù)據(jù)庫可以分為如下兩類。

●關(guān)系型數(shù)據(jù)庫,如MySQL、PostgreSQL、Microsoft SQL Server、Oracle等。

●非關(guān)系型數(shù)據(jù)庫,如BigTable(Google)、Cassandra、MongoDB等。

隨著技術(shù)的發(fā)展,其他類型的數(shù)據(jù)庫也在涌現(xiàn),如鍵值數(shù)據(jù)庫等。

MySQL是常用的關(guān)系型數(shù)據(jù)庫,它有著比較悠久的歷史,曾經(jīng)是開源的,后來被轉(zhuǎn)手到甲骨文公司,目前僅有社區(qū)版開源。盡管如此,因為種種原因,它的使用量仍然比較大。因此,下面就以它為例說明如何從關(guān)系型數(shù)據(jù)庫中讀取數(shù)據(jù)。

如果讀者尚未在本地計算機安裝此數(shù)據(jù),可以參閱“擴展探究”中的相關(guān)內(nèi)容。

作為未來的數(shù)據(jù)科學(xué)行業(yè)從業(yè)者,我們必須掌握數(shù)據(jù)庫有關(guān)知識。

基礎(chǔ)知識

從MySQL數(shù)據(jù)庫中讀取數(shù)據(jù)的最基本方法是使用SQL語句。下面以本地所創(chuàng)建的數(shù)據(jù)庫為例,演示常用的查詢語句。

(1)顯示數(shù)據(jù)庫名稱。

SQL的全稱為Structured Query Language,譯為結(jié)構(gòu)化查詢語言。SQL是用于訪問和處理數(shù)據(jù)庫的標(biāo)準(zhǔn)計算機語言。

查詢已有的數(shù)據(jù)庫,其中名為books的數(shù)據(jù)庫是專為本操作示例而創(chuàng)建的。

(2)顯示某數(shù)據(jù)庫中的表名稱。

首先,指定要操作的數(shù)據(jù)庫。

然后,顯示此數(shù)據(jù)庫中的表名稱:

也可以使用如下SQL語句實現(xiàn)表名稱的查詢。

(3)顯示數(shù)據(jù)庫表的結(jié)構(gòu)。

顯示表結(jié)構(gòu)的常用SQL語句,例如:

SQL語句中的命令不區(qū)分大小寫,通常習(xí)慣用大寫。

或者

(4)查詢表的記錄條數(shù)。

在查詢數(shù)據(jù)庫表的具體內(nèi)容之前,先了解記錄數(shù)量的大小。

查詢顯示mybooks表中共有6條記錄。也可以分組查詢。其中COUNT(1)也可以寫成COUNT(*),結(jié)果一樣。

關(guān)于COUNT(1)和COUNT(*)的區(qū)別,有不同解釋,讀者可以在網(wǎng)上查閱。

此處的查詢結(jié)果顯示,mybooks表中的記錄根據(jù)字段PUB的值可以分為兩組:其中一組有4條,另一組有2條。

在上述查詢記錄數(shù)量的SQL語句中,使用了COUNT(1),其實也可以更換為其他整數(shù)或者字段名稱。

上面語句的含義是針對某個字段的記錄進行查詢。如果使用COUNT(1),則意味著根據(jù)主鍵進行記錄數(shù)量查詢。

(5)查詢記錄詳情。

查詢記錄詳情的SQL語句關(guān)鍵詞是SELECT。下面列舉幾種常見的查詢方法,更多的查詢方法請參閱數(shù)據(jù)庫的文獻資料。

●查詢所有記錄

顯示出數(shù)據(jù)庫表中的所有記錄的所有字段值。

●查詢指定字段值

●查詢結(jié)果按照指定字段值的倒序排列

●依據(jù)條件查詢

查詢到了字段pub的值為“phei”的所有記錄。

查詢到了字段id的值為2和5的記錄。

查詢到了字段id的值在2~5之間的所有記錄。

查詢到了字段id的值中含有“Python”字樣的記錄。

依據(jù)條件查詢的方式還很多,此處不一一列舉,請讀者在應(yīng)用的時候查閱有關(guān)資料。

除了使用SQL語句,還可以利用高級語言實現(xiàn)對數(shù)據(jù)庫內(nèi)容的讀寫操作。例如,Python語言針對MySQL數(shù)據(jù)庫的接口模塊就有多種,此處以其中一個名為PyMySQL的模塊為例進行說明(官方網(wǎng)站:https://pymysql.readthedocs.io/en/latest/)。

首先安裝此模塊:

安裝完畢后,用如下方式連接數(shù)據(jù)庫,并讀取表中的記錄。

此處演示的是連接本地數(shù)據(jù)庫,host也可以用于指定遠程地址。

為了實現(xiàn)Python與MySQL數(shù)據(jù)庫的連接,In[1]的代碼中使用了pymysql模塊,并且用①的方式實現(xiàn)連接,即建立了連接對象(變量mydb引用的pymysql.connect函數(shù)返回對象)。讀者可以通過幫助文檔查看pymysql.connect函數(shù)的各參數(shù)的具體含義。

②創(chuàng)建一個游標(biāo)對象,后續(xù)的各種關(guān)于數(shù)據(jù)庫的操作都是利用此游標(biāo)對象的方法進行的。

③是一個字符串,是從數(shù)據(jù)庫表中讀取所有記錄的SQL語句。

④使用游標(biāo)對象的execute方法執(zhí)行SQL語句,再用⑤得到所有的記錄,為了顯示出來,執(zhí)行其后的循環(huán)語句。

項目案例

1.項目描述

在MySQL環(huán)境中,創(chuàng)建如下結(jié)構(gòu)的數(shù)據(jù)庫表(名字為cities)。

將1.1.1節(jié)的In[2]數(shù)據(jù)寫入此數(shù)據(jù)表中。然后,用Python完成如下查詢。

●查詢表中的記錄總數(shù)。

●只查詢name和area兩個字段的記錄。

●查詢population字段中最大和最小的記錄。

●查詢?nèi)坑涗洠⒉樵兘Y(jié)果按照area字段從大到小地排序。

2.實現(xiàn)過程

(1)根據(jù)要求,用SQL語句創(chuàng)建數(shù)據(jù)庫表結(jié)構(gòu)(也可以用Python完成創(chuàng)建數(shù)據(jù)庫表結(jié)構(gòu)的操作,請讀者自行仿照In[1]的方式完成)。

注意,在此處使用的是“utf8”,不是“utf-8”。

(2)從CSV文檔中讀入數(shù)據(jù),并寫入數(shù)據(jù)庫表city中。

Pandas中也提供了針對讀寫數(shù)據(jù)庫的函數(shù)pd.read_sql()和pd.to_sql(),詳細內(nèi)容請掃描二維碼閱讀《Pandas讀寫文件》。

執(zhí)行In[2]的代碼之后,將原來CSV文件的數(shù)據(jù)插入數(shù)據(jù)庫表city中。如果使用SQL語句查看此表的結(jié)果,可以進行如下操作:

(3)利用Python語言完成查詢要求。

動手練習(xí)

注:以下操作可以基于本節(jié)已經(jīng)創(chuàng)建的數(shù)據(jù)庫進行,也可以自己新建數(shù)據(jù)庫。

1.查詢數(shù)據(jù)庫表中的所有記錄。

2.根據(jù)指定字段查詢。

3.按照指定字段排序,并查詢指定數(shù)量的記錄,如倒序排列之后的前三條記錄。

4.根據(jù)某個字段值查詢。

5.根據(jù)某個字段值在某范圍內(nèi)查詢。

6.根據(jù)某個字段值的字符匹配條件查詢。

7.指定字段,練習(xí)帶AND或者OR的多條件查詢。

擴展探究

1.在本地計算機上安裝MySQL數(shù)據(jù)庫,并熟悉有關(guān)操作。

●安裝:https://dev.mysql.com/doc/refman/8.0/en/installing.html

●SQL語句:https://www.w3schools.com/sql/

2.可以進一步了解其他關(guān)系型數(shù)據(jù)庫,如PostgreSQL(網(wǎng)站:https://www.postgresql.org/)。

3.利用Pandas的函數(shù),讀取數(shù)據(jù)庫中的記錄。

再次體現(xiàn)了Pandas的強大功能。

建議讀者在上述基礎(chǔ)上,用Pandas的函數(shù)完成“動手練習(xí)”中的各題的操作。

4.建議讀者了解非關(guān)系型數(shù)據(jù)庫,如比較常用的MongoDB,其官網(wǎng)是https://www.mongodb.com/

主站蜘蛛池模板: 若尔盖县| 郎溪县| 阿荣旗| 威海市| 扶沟县| 清远市| 腾冲县| 吴旗县| 高尔夫| 昂仁县| 云阳县| 稻城县| 会泽县| 钟祥市| 申扎县| 连州市| 永济市| 马关县| 永春县| 专栏| 丽江市| 封开县| 乌海市| 开阳县| 任丘市| 井冈山市| 吴忠市| 桂阳县| 陆河县| 涿鹿县| 磐安县| 安塞县| 迁安市| 松阳县| 昌乐县| 天水市| 龙泉市| 桂阳县| 沅陵县| 凤山县| 泽普县|