日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
隱藏彩蛋:你知道python有一個內(nèi)置的數(shù)據(jù)庫嗎?

本文轉載自公眾號“讀芯術”(ID:AI_Discovery)。

如果你是軟件開發(fā)人員,相信你一定知道甚至曾經(jīng)使用過一個非常輕量級的數(shù)據(jù)庫——SQLite。它幾乎擁有作為一個關系數(shù)據(jù)庫所需的所有功能,而且這些有功能都保存在一個文件中。下面是一些官方網(wǎng)站顯示可以使用SQLite的場景:

  • 嵌入式設備和物聯(lián)網(wǎng)
  • 數(shù)據(jù)分析
  • 數(shù)據(jù)傳輸
  • 文件歸檔和/或數(shù)據(jù)容器
  • 內(nèi)部或臨時數(shù)據(jù)庫
  • 在演示或測試期間代表企業(yè)數(shù)據(jù)庫
  • 教育、培訓和測試
  • 實驗性SQL語言擴展

最重要的是,SQLite實際上是作為Python的內(nèi)置庫,換言之,你不需要安裝任何服務器端/客戶端軟件,也不需要讓某個東西作為服務運行,只要你用Python導入庫并開始編碼,就會有一個關系數(shù)據(jù)庫管理系統(tǒng)!

輸入與使用

當我們說“內(nèi)置”時,這意味著你甚至不需要運行pip install來獲取庫。只需通過以下方式導入:

 
 
 
 
  1. import sqlite3 as sl 

創(chuàng)建到數(shù)據(jù)庫的連接

不要為驅動程序、連接字符串等煩惱??梢詣?chuàng)建一個SQLite數(shù)據(jù)庫,并擁有一個簡單的連接對象:

 
 
 
 
  1. con = sl.connect('my-test.db') 

運行這行代碼之后,我們已經(jīng)創(chuàng)建了數(shù)據(jù)庫并連接到它。我們要求Python自動連接現(xiàn)有的數(shù)據(jù)庫,因此它不是空的。否則,我們可以使用完全相同的代碼連接到現(xiàn)有數(shù)據(jù)庫。

創(chuàng)建表

然后創(chuàng)建一個表:

 
 
 
 
  1. with con: 
  2.     con.execute(""" 
  3.         CREATE TABLE USER ( 
  4.             id INTEGER NOT NULL PRIMARYKEY AUTOINCREMENT, 
  5.             name TEXT, 
  6.             age INTEGER 
  7.         ); 
  8.     """) 

在這個用戶表中添加三列。正如你所看到的,SQLite確實是輕量級的,但是它支持常規(guī)RDBMS應該具有的所有基本特性,例如數(shù)據(jù)類型、可為null、主鍵和自動遞增。運行這段代碼之后就已經(jīng)創(chuàng)建了一個表,盡管它什么也不輸出。

插入記錄

讓我們在剛剛創(chuàng)建的USER表中插入一些記錄,這也可以證明我們確實創(chuàng)建了它。假設要一次性插入多個條目。Python中的SQLite可以輕松實現(xiàn)這一點。

 
 
 
 
  1. sql = 'INSERT INTO USER (id, name, age) values(?,?, ?)' 
  2. data = [ 
  3.     (1, 'Alice', 21), 
  4.     (2, 'Bob', 22), 
  5.     (3, 'Chris', 23) 

我們需要用問號作為占位符來定義SQL語句。然后,創(chuàng)建一些要插入的示例數(shù)據(jù)。通過連接對象,插入這些示例行。

 
 
 
 
  1. with con: 
  2.     con.executemany(sql, data) 

運行代碼之后,沒有任何提示,證明我們成功了。

查詢表

現(xiàn)在,是時候驗證所做的一切了。查詢表以獲取樣本行。

 
 
 
 
  1. with con: 
  2.     data = con.execute("SELECT *FROM USER WHERE age <= 22") 
  3.     for row in data: 
  4.         print(row) 

另外,盡管SQLite是輕量級的,但是作為一個廣泛使用的數(shù)據(jù)庫,大多數(shù)SQL客戶端軟件都支持使用它。我使用最多的是DBeaver。

從SQL客戶端(DBeaver)連接到SQLite數(shù)據(jù)庫

因為我用的是googlecolab,所以要下載- my-test.db測試數(shù)據(jù)庫文件到本地計算機。在本例中,如果在本地計算機上運行Python,則可以使用SQL客戶機直接連接到數(shù)據(jù)庫文件。

在DBeaver中,創(chuàng)建一個新連接并選擇SQLite作為DB type。

然后,瀏覽到DB文件。

現(xiàn)在,可以在數(shù)據(jù)庫上運行任何SQL查詢。它與其他常規(guī)關系數(shù)據(jù)庫沒有什么不同。

與Pandas無縫融合

事實上,作為Python的一個內(nèi)置特性,SQLite還可以與Pandas數(shù)據(jù)幀無縫集成。

定義一個數(shù)據(jù)幀:

 
 
 
 
  1. df_skill = pd.DataFrame({ 
  2.     'user_id': [1,1,2,2,3,3,3], 
  3.     'skill': ['Network Security','Algorithm Development', 'Network Security', 'Java', 'Python', 'Data Science','Machine Learning'] 
  4. }) 

然后,可以簡單地調(diào)用數(shù)據(jù)幀的to_sql()方法將其保存到數(shù)據(jù)庫中。

 
 
 
 
  1. df_skill.to_sql('SKILL', con) 

就這樣,我們甚至不需要預先創(chuàng)建表,列的數(shù)據(jù)類型和長度都會被推斷出來。當然,如果你想的話,仍然可以事先定義它。

然后,假設我們要連接表USER和SKILL,并將結果讀入Pandas數(shù)據(jù)框。它也是無縫的。

 
 
 
 
  1. df = pd.read_sql(''' 
  2.     SELECT s.user_id, u.name, u.age,s.skill 
  3.     FROM USER u LEFT JOIN SKILL s ON u.id= s.user_id 
  4. ''', con) 

讓我們把結果寫到一個名為USER_SKILL的新表中:

 
 
 
 
  1. df.to_sql('USER_SKILL', con) 

然后,還可以使用SQL客戶機檢索表。

本文介紹了如何使用Python內(nèi)置庫sqlite3在SQLite數(shù)據(jù)庫中創(chuàng)建和操作表。當然,它也支持更新和刪除,你可以自己嘗試一下。

最重要的是,我們可以輕松地將表從SQLite數(shù)據(jù)庫讀入Pandas數(shù)據(jù)幀,反之亦然。這使我們能夠更容易地與輕量級關系數(shù)據(jù)庫進行交互。此外,SQLite沒有身份驗證,因為一切都需要是輕量級的。

Python中隱藏著許多驚喜。它們并不是故意藏起來,只是因為Python中存在太多現(xiàn)成的特性以至于人們無法發(fā)現(xiàn)。去探索Python中更多令人驚訝的特性,享受它們吧!


網(wǎng)站欄目:隱藏彩蛋:你知道python有一個內(nèi)置的數(shù)據(jù)庫嗎?
當前路徑:http://www.5511xx.com/article/ccejjcd.html