目錄
- 寫(xiě)在前面
- 一:使用數(shù)據(jù)庫(kù)的宏觀過(guò)程
- 二:數(shù)據(jù)庫(kù)使用
- 1、導(dǎo)入數(shù)據(jù)庫(kù)模塊
- 2、打開(kāi)數(shù)據(jù)庫(kù)
- 2.1、在硬盤上建立數(shù)據(jù)庫(kù)
- 2.2、在內(nèi)存上建立數(shù)據(jù)庫(kù)
- 3、創(chuàng)建游標(biāo)
- 4、執(zhí)行SQL語(yǔ)句
- 4.1、創(chuàng)建表
- 4.2、新增數(shù)據(jù)
- 4.2、更新數(shù)據(jù)
- 4.3、刪除數(shù)據(jù)
- 4.4、查詢數(shù)據(jù)
- 4.5、刪除表
- 5、查詢并顯示數(shù)據(jù)
- 5.1、全部顯示
- 5.2、顯示一條
- 5.2、顯示多條
- 6、事務(wù)提交或回滾
- 6.1、提交
- 6.2、回滾
- 7、關(guān)閉數(shù)據(jù)庫(kù)連接和游標(biāo)
寫(xiě)在前面
??SQLite3數(shù)據(jù)庫(kù)是一款非常小巧輕量級(jí)的嵌入式開(kāi)源數(shù)據(jù)庫(kù)軟件,也就是說(shuō)沒(méi)有獨(dú)立的維護(hù)進(jìn)程,所有的維護(hù)都來(lái)自于程序本身。由于其方便快捷,從python2.5開(kāi)始SQLite3就成了Python語(yǔ)言的標(biāo)準(zhǔn)模塊了;這也是Python中唯一一個(gè)數(shù)據(jù)庫(kù)接口類模塊,適合用戶開(kāi)發(fā) 小型數(shù)據(jù)庫(kù)系統(tǒng)。 ,此外建議小伙伴們?cè)陂喿x之前先學(xué)習(xí)一些SQL數(shù)據(jù)庫(kù)語(yǔ)言的基本語(yǔ)法,否則看這SQL語(yǔ)句會(huì)有一點(diǎn)蒙。接下來(lái)就體驗(yàn)一下它的神秘力量吧!
一:使用數(shù)據(jù)庫(kù)的宏觀過(guò)程
??我猜很多小伙伴們開(kāi)始學(xué)習(xí)數(shù)據(jù)庫(kù)時(shí)應(yīng)該和我一樣把重點(diǎn)放在學(xué)習(xí)使用數(shù)據(jù)庫(kù)的每一條SQL語(yǔ)句上,可是當(dāng)我學(xué)習(xí)完近所有的語(yǔ)句后發(fā)現(xiàn):我還是對(duì)建立使用數(shù)據(jù)庫(kù)的過(guò)程一知半解,這樣缺少?gòu)恼w上對(duì)數(shù)據(jù)庫(kù)的認(rèn)識(shí)和了解。所以 我認(rèn)為正確的方法應(yīng)該是:先從整體上對(duì)數(shù)據(jù)庫(kù)的使用過(guò)程有一個(gè)清晰宏觀的掌握,之后再深入學(xué)習(xí),這樣食用味道會(huì)更佳哦!
二:數(shù)據(jù)庫(kù)使用
1、導(dǎo)入數(shù)據(jù)庫(kù)模塊
??此處沒(méi)有什么可說(shuō)的,由于python2.5以后的安裝包已經(jīng)自帶SQLite3的軟件包了,所以一行語(yǔ)句直接導(dǎo)入即可。
import
sqlite3
2、打開(kāi)數(shù)據(jù)庫(kù)
??在python中,使用sqlite3創(chuàng)建數(shù)據(jù)庫(kù)的連接,當(dāng)我們指定的數(shù)據(jù)庫(kù)文件不存在的時(shí)候連接對(duì)象會(huì)自動(dòng)創(chuàng)建數(shù)據(jù)庫(kù)文件;如果數(shù)據(jù)庫(kù)文件已經(jīng)存在,則連接對(duì)象不會(huì)再創(chuàng)建數(shù)據(jù)庫(kù)文件,而是直接打開(kāi)該數(shù)據(jù)庫(kù)文件。 連接對(duì)象可以是硬盤上面的數(shù)據(jù)庫(kù)文件,也可以是建立在內(nèi)存(memory)中的,在內(nèi)存中的數(shù)據(jù)庫(kù)執(zhí)行完任何操作后,都不需要提交事務(wù)的(commit)
??connect方法返回con對(duì)象,即是數(shù)據(jù)庫(kù)鏈接對(duì)象,它提供了以下方法:
| 方法 | 描述 |
|---|---|
| .cursor() | 創(chuàng)建一個(gè)游標(biāo)對(duì)象 |
| .commit() | 處理事務(wù)提交 |
| .rollback() | 處理事務(wù)回滾 |
| .close() | 關(guān)閉一個(gè)數(shù)據(jù)庫(kù)連接 |
2.1、在硬盤上建立數(shù)據(jù)庫(kù)
方法一:
con
=
sqlite3
.
connect
(
"E:\Test.db"
)
??注意:
E:\Test.db
與
E:\\Test.db
與
E:\TEST.db
均相同。由此可見(jiàn)
數(shù)據(jù)庫(kù)的名稱不區(qū)分大小寫(xiě),且以第一次建立時(shí)的名字為準(zhǔn)。
但需要注意的是:
E:\test.db
會(huì)報(bào)錯(cuò),因?yàn)榫幾g器會(huì)識(shí)別到
\t
為制表符,因此認(rèn)為路徑不對(duì)。
方法二:
con
=
sqlite3
.
connect
(
"Test.db"
)
??不加全路徑時(shí),數(shù)據(jù)庫(kù)文件會(huì)自動(dòng)建立在工程項(xiàng)目文件夾下。
2.2、在內(nèi)存上建立數(shù)據(jù)庫(kù)
con
=
sqlite3
.
connect
(
"memory"
)
3、創(chuàng)建游標(biāo)
??游標(biāo)對(duì)象有以下方法支持?jǐn)?shù)據(jù)庫(kù)操作:
| 方法 | 描述 |
|---|---|
| .execute() | 用來(lái)執(zhí)行sql語(yǔ)句 |
| .executemany() | 用來(lái)執(zhí)行多條sql語(yǔ)句 |
| .close() | 用來(lái)關(guān)閉游標(biāo) |
| .fetchone() | 用來(lái)從結(jié)果中取一條記錄,并將游標(biāo)指向下一條記錄 |
| .fetchmany() | 用來(lái)從結(jié)果中取多條記錄。 |
| .fetchall() | 用來(lái)從結(jié)果中取出所以記錄。 |
| .scroll() | 用于游標(biāo)滾動(dòng)。 |
??創(chuàng)建游標(biāo)示例:
cur
=
con
.
cursor
(
)
4、執(zhí)行SQL語(yǔ)句
4.1、創(chuàng)建表
示例中所有的大寫(xiě)字符為SQL語(yǔ)法標(biāo)準(zhǔn),小寫(xiě)字符為用戶自定義的字符,但由于SQL語(yǔ)句不區(qū)分大小寫(xiě),所以將SQL標(biāo)準(zhǔn)語(yǔ)句小寫(xiě)也可以。
方法一:
cur
.
execute
(
"CREATE TABLE IF NOT EXISTS test(id INTEGER PRIMARY KEY,name TEXT,age INTEGER)"
)
方法二:
cur
.
execute
(
"CREATE TABLE test(id INTEGER PRIMARY KEY,name TEXT,age INTEGER)"
)
??注意:
如果使用方法二(不加
IF NOT EXISTS
),當(dāng)項(xiàng)目中存在相同的表時(shí)會(huì)報(bào)錯(cuò),所以為了省略檢查表是否已建立的過(guò)程,建議使用方法一。
4.2、新增數(shù)據(jù)
方法一
data
=
"5,'leon',22"
cur
.
execute
(
'INSERT INTO test VALUES (%s)'
%
data
)
方法二
cur
.
execute
(
"INSERT INTO test values(?,?,?)"
,
(
6
,
"zgq"
,
20
)
)
方法三
cur
.
executemany
(
'INSERT INTO test VALUES (?,?,?)'
,
[
(
3
,
'name3'
,
19
)
,
(
4
,
'name4'
,
26
)
]
)
4.2、更新數(shù)據(jù)
方法一:
cur
.
execute
(
"UPDATE test SET name=? WHERE id=?"
,
(
"nihao"
,
1
)
)
方法二:
cur
.
execute
(
"UPDATE test SET name='haha' WHERE id=1"
)
4.3、刪除數(shù)據(jù)
方法一:
n
=
cur
.
execute
(
"DELETE FROM test WHERE id=?"
,
(
1
,
)
)
方法二:
n
=
cur
.
execute
(
"DELETE FROM test WHERE id=2"
)
??返回的n為游標(biāo)對(duì)象
4.4、查詢數(shù)據(jù)
cur
.
execute
(
"SELECT * FROM test"
)
??查詢的結(jié)果存儲(chǔ)在游標(biāo)對(duì)象cur中,可以使用對(duì)象的方法進(jìn)行訪問(wèn)。
4.5、刪除表
cur
.
execute
(
"DROP TABLE Test "
)
5、查詢并顯示數(shù)據(jù)
5.1、全部顯示
cur
.
execute
(
"select * from Test"
)
for
item
in
cur
:
print
(
item
)
或
print
(
cur
.
fetchall
(
)
)
5.2、顯示一條
print
(
cur
.
fetchone
(
)
)
5.2、顯示多條
print
(
cur
.
fetchmany
(
3
)
)
注意:使用游標(biāo)的方法返回的數(shù)據(jù)類型是列表。
6、事務(wù)提交或回滾
6.1、提交
con
.
commit
(
)
6.2、回滾
con
.
rollback
(
)
7、關(guān)閉數(shù)據(jù)庫(kù)連接和游標(biāo)
cur
.
close
(
)
con
.
close
(
)
??注意: 一定要先關(guān)閉游標(biāo),再關(guān)閉數(shù)據(jù)庫(kù)連接,否則會(huì)報(bào)錯(cuò)!
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

