溫馨提示×

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

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

python內(nèi)置的數(shù)據(jù)庫(kù)是什么

發(fā)布時(shí)間:2021-10-28 16:46:13 來(lái)源:億速云 閱讀:481 作者:iii 欄目:編程語(yǔ)言

這篇文章主要介紹“python內(nèi)置的數(shù)據(jù)庫(kù)是什么”,在日常操作中,相信很多人在python內(nèi)置的數(shù)據(jù)庫(kù)是什么問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”python內(nèi)置的數(shù)據(jù)庫(kù)是什么”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

輸入與使用

python內(nèi)置的數(shù)據(jù)庫(kù)是什么

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

import sqlite3 as sl

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

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

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ù)。

python內(nèi)置的數(shù)據(jù)庫(kù)是什么

創(chuàng)建表

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

with con:     con.execute("""         CREATE TABLE USER (             id INTEGER NOT NULL PRIMARYKEY AUTOINCREMENT,             name TEXT,             age INTEGER         );     """)

在這個(gè)用戶表中添加三列。正如你所看到的,SQLite確實(shí)是輕量級(jí)的,但是它支持常規(guī)RDBMS應(yīng)該具有的所有基本特性,例如數(shù)據(jù)類(lèi)型、可為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)。

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

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

with con:     con.executemany(sql, data)

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

查詢表

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

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

python內(nèi)置的數(shù)據(jù)庫(kù)是什么

另外,盡管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。

python內(nèi)置的數(shù)據(jù)庫(kù)是什么

然后,瀏覽到DB文件。

python內(nèi)置的數(shù)據(jù)庫(kù)是什么

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

python內(nèi)置的數(shù)據(jù)庫(kù)是什么

與Pandas無(wú)縫融合

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

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

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

python內(nèi)置的數(shù)據(jù)庫(kù)是什么

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

df_skill.to_sql('SKILL', con)

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

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

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

python內(nèi)置的數(shù)據(jù)庫(kù)是什么

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

df.to_sql('USER_SKILL', con)

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

python內(nèi)置的數(shù)據(jù)庫(kù)是什么

到此,關(guān)于“python內(nèi)置的數(shù)據(jù)庫(kù)是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

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

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

AI