自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

隱藏彩蛋:你知道python有一個(gè)內(nèi)置的數(shù)據(jù)庫(kù)嗎?

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

本文轉(zhuǎn)載自公眾號(hào)“讀芯術(shù)”(ID:AI_Discovery)。

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

[[339832]]

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

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

輸入與使用

[[339833]]

當(dāng)我們說(shuō)“內(nèi)置”時(shí),這意味著你甚至不需要運(yùn)行pip install來(lái)獲取庫(kù)。只需通過(guò)以下方式導(dǎo)入:

  1. import sqlite3 as sl 

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

不要為驅(qū)動(dòng)程序、連接字符串等煩惱??梢詣?chuàng)建一個(gè)SQLite數(shù)據(jù)庫(kù),并擁有一個(gè)簡(jiǎn)單的連接對(duì)象:

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

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

創(chuàng)建表

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

  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.     """) 

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

插入記錄

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

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

我們需要用問(wèn)號(hào)作為占位符來(lái)定義SQL語(yǔ)句。然后,創(chuàng)建一些要插入的示例數(shù)據(jù)。通過(guò)連接對(duì)象,插入這些示例行。

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

運(yùn)行代碼之后,沒(méi)有任何提示,證明我們成功了。

查詢表

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

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

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

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

因?yàn)槲矣玫氖莋ooglecolab,所以要下載- my-test.db測(cè)試數(shù)據(jù)庫(kù)文件到本地計(jì)算機(jī)。在本例中,如果在本地計(jì)算機(jī)上運(yùn)行Python,則可以使用SQL客戶機(jī)直接連接到數(shù)據(jù)庫(kù)文件。

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

然后,瀏覽到DB文件。

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

與Pandas無(wú)縫融合

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

定義一個(gè)數(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. }) 

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

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

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

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

  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.ids.user_id 
  4. ''', con) 

讓我們把結(jié)果寫(xiě)到一個(gè)名為USER_SKILL的新表中:

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

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

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

最重要的是,我們可以輕松地將表從SQLite數(shù)據(jù)庫(kù)讀入Pandas數(shù)據(jù)幀,反之亦然。這使我們能夠更容易地與輕量級(jí)關(guān)系數(shù)據(jù)庫(kù)進(jìn)行交互。此外,SQLite沒(méi)有身份驗(yàn)證,因?yàn)橐磺卸夹枰禽p量級(jí)的。

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

 

責(zé)任編輯:趙寧寧 來(lái)源: 今日頭條
相關(guān)推薦

2020-07-31 08:07:54

Python開(kāi)發(fā)數(shù)據(jù)庫(kù)

2018-04-26 13:33:20

Python語(yǔ)法Bug

2020-04-08 08:35:20

JavaScript模塊函數(shù)

2023-11-01 15:45:29

DBMPython

2017-01-18 18:28:54

大數(shù)據(jù)數(shù)據(jù)庫(kù)技術(shù)

2021-11-02 22:50:10

鼠標(biāo)計(jì)算機(jī)傳感器

2022-05-09 10:47:08

登錄SpringSecurity

2016-11-21 11:43:11

Python

2021-07-29 10:46:56

Python內(nèi)置庫(kù)代碼

2021-08-27 09:48:18

Pythonitertools代碼

2021-09-15 09:20:37

Python函數(shù)代碼

2020-10-16 15:06:59

開(kāi)發(fā)技術(shù)方案

2023-11-13 15:36:24

開(kāi)源數(shù)據(jù)庫(kù)

2021-05-14 10:45:21

PythonNoSQL數(shù)據(jù)庫(kù)

2017-05-18 12:16:03

LinuxPythonNoSql

2018-02-28 11:42:59

戴爾

2019-10-29 08:44:47

Java數(shù)據(jù)庫(kù)實(shí)體

2011-04-01 09:49:54

Python

2022-01-08 20:03:20

數(shù)據(jù)庫(kù)特點(diǎn)架構(gòu)

2018-01-15 15:35:15

數(shù)據(jù)庫(kù)性能調(diào)優(yōu)案例
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)