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

你知道Python有內(nèi)置數(shù)據(jù)庫(kù)嗎?Python內(nèi)置庫(kù)SQlite3使用指南

開(kāi)發(fā) 后端
如果你是軟件開(kāi)發(fā)人員,相信你一定知道或者曾經(jīng)使用過(guò)一個(gè)非常輕量級(jí)的數(shù)據(jù)庫(kù)——SQLite。它具有作為關(guān)系數(shù)據(jù)庫(kù)所需的幾乎所有功能,但是這個(gè)數(shù)據(jù)庫(kù)把所有功能都保存在一個(gè)文件中。

 [[335808]]

如果你是軟件開(kāi)發(fā)人員,相信你一定知道或者曾經(jīng)使用過(guò)一個(gè)非常輕量級(jí)的數(shù)據(jù)庫(kù)——SQLite。它具有作為關(guān)系數(shù)據(jù)庫(kù)所需的幾乎所有功能,但是這個(gè)數(shù)據(jù)庫(kù)把所有功能都保存在一個(gè)文件中。在其官方網(wǎng)站上,SQLite的主要應(yīng)用場(chǎng)景包括:

  • 嵌入式設(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ò)展

當(dāng)然,SQLite還有很多其他功能,在此不一一列舉,感興趣的同學(xué)可以去看官方文檔:https://www.sqlite.org/whentouse.html

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

導(dǎo)入和使用

 

這里我們說(shuō)“內(nèi)置”的意思就是,你甚至不需要運(yùn)行 pip install ,就能獲取庫(kù)。只需要通過(guò)以下方式導(dǎo)入:

 

  1. import sqlite3 as sl 

1.創(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連接的數(shù)據(jù)庫(kù)不存在,它就會(huì)自動(dòng)幫我們創(chuàng)建一個(gè)空數(shù)據(jù)庫(kù)。 如果我們已經(jīng)創(chuàng)建了數(shù)據(jù)庫(kù),就能用上面完全相同的代碼連接到現(xiàn)有數(shù)據(jù)庫(kù)。

 

你知道Python有內(nèi)置數(shù)據(jù)庫(kù)嗎?Python內(nèi)置庫(kù)SQlite3使用指南

 

2.創(chuàng)建表格

接下來(lái),我們先創(chuàng)建一個(gè)表格。

 

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

在這個(gè) USER 表中,我們添加了三列。正如我們所看到的,SQLite 確實(shí)是輕量級(jí)的,但是它支持常規(guī) RDBMS 應(yīng)該具有的所有基本特性,例如數(shù)據(jù)類型、可為null、主鍵和自動(dòng)遞增。

運(yùn)行這段代碼之后,我們就已經(jīng)創(chuàng)建好了一個(gè)表,盡管它什么都沒(méi)有輸出。

3.插入記錄

讓我們?cè)趧倓倓?chuàng)建的 USER 表中插入數(shù)據(jù)記錄,這也可以證明我們確實(shí)創(chuàng)建了它。

如果我們需要一次性插入多個(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ǔ)句 。接下來(lái)就是創(chuàng)建一些要插入的示例數(shù)據(jù)。使用連接對(duì)象,就能插入這些示例行。

 

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

在運(yùn)行代碼之后,沒(méi)有報(bào)錯(cuò),那就是成功的。

4.查詢表格

接下來(lái),我們通過(guò)實(shí)際的方式來(lái)驗(yàn)證我們所做的一切,通過(guò)查詢表格來(lái)獲取示例行。

 

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

 

你知道Python有內(nèi)置數(shù)據(jù)庫(kù)嗎?Python內(nèi)置庫(kù)SQlite3使用指南

 

 

你可以看到,很簡(jiǎn)單就得到了結(jié)果。

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

我自己用得最多的是 DBeaver,接下來(lái)給大家介紹一下。

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

因?yàn)槲矣玫氖?googlecolab,所以我要將 my-test.db 文件下載到我的本地計(jì)算機(jī)上。當(dāng)然,你也可以直接在你的電腦上使用 Python 數(shù)據(jù)庫(kù)連接你的本地?cái)?shù)據(jù)庫(kù)。

在 DBeaver 中,創(chuàng)建一個(gè)新連接并選擇 SQLite 作為數(shù)據(jù)庫(kù)類型。

 

你知道Python有內(nèi)置數(shù)據(jù)庫(kù)嗎?Python內(nèi)置庫(kù)SQlite3使用指南

 

然后,瀏覽DB文件。

 

你知道Python有內(nèi)置數(shù)據(jù)庫(kù)嗎?Python內(nèi)置庫(kù)SQlite3使用指南

 

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

 

你知道Python有內(nèi)置數(shù)據(jù)庫(kù)嗎?Python內(nèi)置庫(kù)SQlite3使用指南

 

與Pandas無(wú)縫連接

 

你以為就只有這些?不,事實(shí)上,作為Python的一個(gè)內(nèi)置特性,SQLite 可以與 Pandas 數(shù)據(jù)幀無(wú)縫連接。

讓我們先來(lái)定義一個(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. }) 

 

你知道Python有內(nèi)置數(shù)據(jù)庫(kù)嗎?Python內(nèi)置庫(kù)SQlite3使用指南

 

 

然后,我們可以簡(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ù)框。

 

  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) 

 

你知道Python有內(nèi)置數(shù)據(jù)庫(kù)嗎?Python內(nèi)置庫(kù)SQlite3使用指南

 

 

是不是很厲害?讓我們把結(jié)果寫到一個(gè)名為USER_SKILL的新表中。

 

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

我們也可以用SQL客戶端來(lái)檢索表。

 

你知道Python有內(nèi)置數(shù)據(jù)庫(kù)嗎?Python內(nèi)置庫(kù)SQlite3使用指南

 

總結(jié)

實(shí)際上,Python中還隱藏著很多驚喜。而且這些驚喜并不沒(méi)有隱藏起來(lái),只是Python有太多現(xiàn)成可以直接使用的特性了,這就導(dǎo)致很多人無(wú)法發(fā)現(xiàn)這些特性。

在本文中,我介紹了如何使用 Python 內(nèi)置庫(kù) sqlite3 在 SQLite 數(shù)據(jù)庫(kù)中創(chuàng)建和操作表。它也支持對(duì)表格進(jìn)行更新和刪除操作,建議大家在看完這篇文章之后自己嘗試一下。

最重要的是,我們可以輕松地將表從 SQLite 數(shù)據(jù)庫(kù)讀入 Pandas 數(shù)據(jù)幀,反之亦然。這使我們能夠更容易地與我們的輕量級(jí)關(guān)系數(shù)據(jù)庫(kù)進(jìn)行交互。

你可能會(huì)注意到 SQLite 沒(méi)有進(jìn)行身份驗(yàn)證,這也是它刻意設(shè)計(jì)的行為,因?yàn)樾枰p量化。

一起去探索Python中更多令人驚訝的特性吧!

 

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

2023-11-24 11:11:08

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

2020-08-29 19:15:09

python數(shù)據(jù)庫(kù)SQLite

2013-04-10 14:21:35

2013-04-09 16:47:19

iOS嵌入式數(shù)據(jù)庫(kù)SQLit

2011-07-07 16:42:38

iPhone Sqlite3 數(shù)據(jù)庫(kù)

2021-09-12 17:25:12

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

2021-06-05 21:29:53

數(shù)據(jù)庫(kù)MySQL函數(shù)

2012-03-06 09:50:24

Android SQLAndroidSQLite3

2023-11-01 15:45:29

DBMPython

2020-10-20 14:10:51

Python代碼字符串

2017-10-26 12:37:24

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

2019-08-15 07:00:54

SQLite數(shù)據(jù)庫(kù)內(nèi)存數(shù)據(jù)庫(kù)

2017-01-18 18:28:54

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

2024-10-28 16:31:03

2010-03-04 15:31:44

Python SQLI

2024-03-07 13:02:57

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

2024-02-19 00:00:00

SQLite3數(shù)據(jù)庫(kù)代碼

2024-03-13 10:40:00

性能探測(cè)工具SQL語(yǔ)句數(shù)據(jù)庫(kù)

2021-09-15 09:20:37

Python函數(shù)代碼

2023-11-08 08:32:16

點(diǎn)贊
收藏

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