精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

你知道 Python 其實自帶了小型數(shù)據(jù)庫嗎

開發(fā) 前端
DBM(DataBase Manager)是一種文件系統(tǒng),專門用于鍵值對的存儲,最初是在 Unix 平臺實現(xiàn),現(xiàn)在其它平臺也可以用。對于 KV 模型,DBM 提供了一個輕量級、高效的存儲解決方案。

DBM

DBM(DataBase Manager)是一種文件系統(tǒng),專門用于鍵值對的存儲,最初是在 Unix 平臺實現(xiàn),現(xiàn)在其它平臺也可以用。對于 KV 模型,DBM 提供了一個輕量級、高效的存儲解決方案。

總的來說,DBM 具有如下特點:

  • 簡單快速:非常簡單易用,讀取和寫入操作都很快,適合存儲少量數(shù)據(jù)。
  • 鍵值對存儲:數(shù)據(jù)是以鍵值對形式存儲的,你可以像操作 Python 字典一樣。
  • 文件存儲:數(shù)據(jù)存在具體的文件中,可以輕松地備份和轉移。
  • 不支持復雜查詢:如果需要執(zhí)行復雜查詢或需要關系型數(shù)據(jù)庫的功能,DBM 可能不是一個好選擇。

而 Python 標準庫提供了一個 dbm 模塊,它實現(xiàn)了 DBM 文件系統(tǒng)的功能,來看一下它的用法。

import dbm

# 第一個參數(shù)是文件名
# 第二個參數(shù)是模式,有以下幾種
#     r:只讀,要求文件必須存在,默認就是這個模式
#     w:可讀可寫,要求文件必須存在
#     c:可讀可寫,文件不存在會創(chuàng)建,存在則追加
#     n:可讀可寫,文件不存在會創(chuàng)建,存在則清空
# 第三個參數(shù)是權限,用八進制數(shù)字表示,默認 0o666,即可讀可寫不可執(zhí)行
db = dbm.open("store", "c")

# 打開文件就可以存儲值了,key 和 value 必須是字符串或 bytes 對象
db["name"] = "S せんせい"
db["age"] = "18"
db[b"corporation"] = "小摩".encode("utf-8")

# 關閉文件,將內(nèi)容寫到磁盤上
db.close()

非常簡單,就像操作字典一樣,并且 key 是唯一的,如果存在則替換。執(zhí)行完后,當前目錄會多出一個 store.db 文件。

圖片圖片

我們打開它,然后讀取剛才寫入的鍵值對。

import dbm

db = dbm.open("store", "c")

# 獲取所有的 key,直接返回一個列表
print(db.keys())
"""
[b'corporation', b'name', b'age']
"""
# 判斷一個 key 是否存在,key 可以是字符串或 bytes 對象
print("name" in db, "NAME" in db)
"""
True False
"""
# 獲取一個 key 對應的 value,得到的是 bytes 對象
print(db["name"].decode("utf-8"))
print(db[b"corporation"].decode("utf-8"))
"""
S せんせい
小摩
"""
# key 如果不存在,會拋出 KeyError,我們可以使用 get 方法
print(db.get("NAME", b"unknown"))
"""
b'unknown'
"""
# 當然也可以使用 setdefault 方法,key 不存在時,自動寫進去
print(db.setdefault("gender", b"female"))
"""
b'female'
"""
print(db["gender"])
"""
b'female'
"""

非常簡單,當你需要存儲的數(shù)據(jù)量不適合放在內(nèi)存中,但又沒必要引入數(shù)據(jù)庫,那么不妨試試使用 dbm 模塊吧。

當然啦,dbm 雖然很方便,但它只能持久化 bytes 對象,字符串也是轉成 bytes 對象之后再存儲的。所以除了 dbm 之外,還有一個標準庫模塊 shelve,它可以持久化任意對象。

shelve

shelve 的使用方式和 dbm 幾乎是一致的,區(qū)別就是 shelve 的序列化能力要更強,當然速度自然也就慢一些。

import shelve

# 第二個參數(shù)表示模式,默認是 c
# 因此文件不存在會創(chuàng)建,存在則追加
sh = shelve.open("shelve")

sh["name"] = ["S 老師", "高老師", "電烤??架"]
sh["age"] = {18}
sh["job"] = {"tutu": "大學生", "xueer": "醫(yī)生"}

# 關閉文件,刷到磁盤中
sh.close()

執(zhí)行完之后,本地會多出一個 shelve.db 文件,下面來讀取它。

import shelve

sh = shelve.open("shelve")

print(sh["name"])
print(sh["name"][2] == "電烤??架")
"""
['S 老師', '高老師', '電烤??架']
True
"""
print(sh["age"])
"""
{18}
"""
print(sh["job"])
"""
{'tutu': '大學生', 'xueer': '醫(yī)生'}
"""

sh.close()

讀取出來的就是原始的對象,我們可以直接操作它。

然后自定義類的實例對象也是可以的。

import shelve

class People:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    @property
    def print_info(self):
        return f"name is {self.name}, age is {self.age}"

sh = shelve.open("shelve")

p = People("群主", 58)
# 將類、和該類的實例對象存儲進去
sh["People"] = People
sh["p"] = p
sh.close()

執(zhí)行完之后,我們打開它。

import shelve

sh = shelve.open("shelve")

# 需要注意的是,People 是我們自己定義的類
# 如果你想要將其還原出來,那么該類必須要出現(xiàn)在當前的命名空間中
try:
    sh["People"]
except AttributeError as e:
    print(e)
    """
    Can't get attribute 'People' on <module ...>
    """

class People:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    @property
    def print_info(self):
        return f"name is {self.name}, age is {self.age}"

print(sh["People"] is People)
"""
True
"""
print(sh["p"].print_info)
"""
name is 群主, age is 58
"""
print(sh["People"]("群主", 38).print_info)
"""
name is 群主, age is 38
"""

這就是 shelve 模塊,非常強大,當然它底層也是基于 pickle 實現(xiàn)的。如果你不需要存儲復雜的 Python 對象,只需要存儲字符串的話,那么還是推薦 dbm。

然后在使用 shelve 的時候,需要注意里面的一個坑。

import shelve

# 打開文件,設置鍵值對
sh = shelve.open("shelve")
sh["name"] = "古明地覺"
sh["score"] = [80, 80, 80]
sh.close()

# 重新打開文件,修改鍵值對
sh = shelve.open("shelve")
sh["name"] = "芙蘭朵露"
sh["score"].append(90)
sh.close()

# 再次重新打開文件,查看鍵值對
sh = shelve.open("shelve")
print(sh["name"])
print(sh["score"])
"""
芙蘭朵露
[80, 80, 80]
"""
sh.close()

第一次打開文件創(chuàng)建兩個鍵值對,第二次打開文件將鍵值對修改,第三次打開文件查看鍵值對。但是我們發(fā)現(xiàn) sh["name"] 變了,而 sh["score"] 卻沒變,這是什么原因?

當我們修改 name 時,采用的是直接賦值的方式,會將原本內(nèi)存里的值給替換掉。而修改 score時,是在原有值的基礎上做 append 操作,它的內(nèi)存地址并沒有變。

所以可變對象在本地進行修改,shelve 默認是不會記錄的,除非創(chuàng)建新的對象,并把原有的對象給替換掉。所以 sh["score"].append(90) 之后,sh["score"] 仍是 [80, 80, 80],而不是 [80, 80, 80, 90]。

因為 shelve 沒有記錄對象自身的修改,如果想得到期望的結果,一種方法是把對象整體換掉。也就是讓 sh["score"] = [80, 80, 80, 90],這樣等于是創(chuàng)建了一個新的對象并重新賦值,是可行的。

或者你在打開文件的時候,多指定一個參數(shù) writeback。

import shelve

# 打開文件,設置鍵值對
sh = shelve.open("shelve")
sh["name"] = "古明地覺"
sh["score"] = [80, 80, 80]
sh.close()

# 重新打開文件,修改鍵值對
sh = shelve.open("shelve", writeback=True)
sh["name"] = "芙蘭朵露"
sh["score"].append(90)
sh.close()

# 再次重新打開文件,查看鍵值對
sh = shelve.open("shelve")
print(sh["name"])
print(sh["score"])
"""
芙蘭朵露
[80, 80, 80, 90]
"""
sh.close()

可以看到都發(fā)生改變了,但這個參數(shù)會導致額外的內(nèi)存消耗。當指定 writeback=True 的時候,shelve 會將讀取的對象都放到一個內(nèi)存緩存當中。比如我們操作了 20 個持久化的對象,但只修改了一個,剩余的 19 個只是查看并沒有做修改,但當 sh.close() 的時候,會將這 20 個對象都寫回去。

因為 shelve 不知道你會對哪個對象做修改,所以不管你是查看還是修改,都會放到緩存當中,然后再一次性都寫回去。這樣就會造成兩點影響:

  • shelve 會把我們使用的對象放到內(nèi)存的另一片空間中,等于是額外拷貝了一份。
  • 雖然操作了 N 個對象,但只修改了 1 個,而 shelve 會把 N 個對象都重新寫回去,從而造成性能上的問題,導致效率降低。

因此加不加這個參數(shù),由具體情況決定。

綜上所述,Python 算是自帶了小型數(shù)據(jù)庫,看看能不能在合適的場景中把它用上。

責任編輯:華軒 來源: 古明地覺的編程教室
相關推薦

2020-08-25 08:00:18

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

2017-01-18 18:28:54

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

2025-05-07 04:45:00

AIOPS數(shù)據(jù)庫Oracle

2021-09-29 11:30:03

子集問題模板題

2020-07-31 08:07:54

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

2020-08-29 19:15:09

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

2024-01-30 15:29:20

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

2023-11-13 15:36:24

開源數(shù)據(jù)庫

2014-01-22 09:17:12

2020-01-14 10:37:38

存儲DateTime數(shù)值

2024-04-07 00:02:00

2022-01-08 20:03:20

數(shù)據(jù)庫特點架構

2023-02-26 23:33:02

SQLMySQL數(shù)據(jù)庫

2019-02-28 10:37:19

開源數(shù)據(jù)庫Oracle

2022-12-18 19:38:31

時序數(shù)據(jù)庫數(shù)據(jù)庫

2024-06-14 07:59:00

2025-03-25 08:40:00

前端開發(fā)Axios

2024-03-13 10:40:00

性能探測工具SQL語句數(shù)據(jù)庫

2019-04-08 14:58:36

數(shù)據(jù)庫SQL數(shù)據(jù)類型

2022-04-14 13:48:33

MySQL數(shù)據(jù)庫并發(fā)量
點贊
收藏

51CTO技術棧公眾號

欧美日韩在线一| 欧美性视频网站| 特级黄色片视频| 懂色av一区| 久久久久久久久伊人| 全球成人中文在线| 欧美日韩色视频| 久久影视三级福利片| 欧美性极品少妇| 国产911在线观看| 青青草视频在线免费观看| 美女视频黄频大全不卡视频在线播放| 欧美极品在线播放| 亚洲AV无码片久久精品| 国产精品亚洲欧美一级在线 | 欧美一区二区三区男人的天堂| 97久久国产亚洲精品超碰热| 久草视频视频在线播放| 国产精品2024| 国产在线观看91精品一区| 国产精品111| 五月激情久久久| 亚洲免费中文字幕| 午夜影院福利社| 国产精品久久久久77777丨| 亚洲午夜av在线| 伊人久久99| 高清在线观看av| 99久久综合色| 亚洲xxxx在线| 91好色先生tv| 日本午夜精品视频在线观看| 69视频在线免费观看| 国产探花在线播放| 国产精品片aa在线观看| 亚洲第一区中文99精品| 999久久久精品视频| 免费污视频在线一区| 图片区小说区国产精品视频| 国内自拍中文字幕| 日本在线天堂| 国产三级一区二区| 欧美一卡2卡3卡4卡无卡免费观看水多多 | 欧美性生活大片免费观看网址| 欧美 日韩 国产精品| 日本中文在线| 中文字幕人成不卡一区| 日本精品一区二区三区不卡无字幕| 日韩专区第一页| va亚洲va日韩不卡在线观看| 国产精品yjizz| www国产在线| 国产成人精品影院| 亚洲自拍偷拍在线| 国产欧美久久久精品免费| 久久精品99国产精品日本| 国产精品高潮粉嫩av| 日日夜夜狠狠操| 天堂影院一区二区| 国产精品高精视频免费| 日韩乱码一区二区三区| 日韩av电影免费观看高清完整版| 国产成人精品电影| 精品国产青草久久久久96| 视频一区视频二区中文字幕| 日本午夜人人精品| 在线观看国产区| 久久精品国内一区二区三区| 成人网欧美在线视频| av手机免费看| 波多野结衣精品在线| 精品国产一区二区三区麻豆小说 | 青青草成人在线| 91久久国产综合久久91| 日本欧美一区二区三区| 国产一区视频在线播放| 99在线无码精品入口| 国产精品香蕉一区二区三区| 国产高清在线一区二区| 无码国精品一区二区免费蜜桃| 99久久综合精品| 日韩精品大片| 在线看女人毛片| 午夜精品在线看| 精品久久久久久中文字幕2017| 国产成人精品一区二三区在线观看| 欧美色综合网站| 91av免费观看| 丝袜美腿综合| 久久网福利资源网站| 久久久久久久久久久网 | 欧美在线色图| 欧美裸体xxxx极品少妇| 久久久久久久久久影院| 捆绑变态av一区二区三区| 91精品视频免费观看| 人妻精品一区二区三区| 欧美精彩视频一区二区三区| 在线观看视频黄色| 在线人成日本视频| 91麻豆精品国产91久久久资源速度| 中文在线观看免费视频| 日韩精品免费| 午夜精品一区二区三区在线播放| 欧美 亚洲 另类 激情 另类| 国产v综合v亚洲欧| 神马影院午夜我不卡影院| 青春草免费在线视频| 91搞黄在线观看| 中文字幕99页| 999国产精品永久免费视频app| 久久青草精品视频免费观看| 亚洲天堂网视频| 97精品国产露脸对白| 最新精品视频| 芒果视频成人app| 亚洲成人av中文字幕| 精品日韩在线视频| 国产精品一二| 成人免费视频观看视频| av在线首页| 欧美色视频日本版| 亚洲欧美综合视频| 婷婷丁香综合| 国产精品成人v| 欧美一区二区三区黄片| 亚洲图片欧美激情| 亚洲综合在线网站| 欧美一级一片| 隔壁老王国产在线精品| 国产永久免费视频| 国产欧美一区二区在线| 国内自拍在线观看| 成人av综合网| 欧美日韩成人网| 国产乱码一区二区| 国产精品女同一区二区三区| 日韩视频在线免费看| 任你弄精品视频免费观看| 欧美—级a级欧美特级ar全黄| 一区二区日韩视频| 国产精品天美传媒| 男女男精品视频站| 日本电影一区二区| 国产精品99一区| 国产中文字幕在线观看| 日韩欧美一区二区三区| 97人妻精品一区二区三区免 | 久久久欧美一区二区| 亚洲a视频在线| 亚洲女同一区二区| www.偷拍.com| 欧美日韩国产精品一区二区亚洲| 91探花福利精品国产自产在线 | 国内精品久久久| 日韩中文字幕综合| 婷婷丁香久久五月婷婷| 老熟妇精品一区二区三区| 亚洲黄色视屏| 玖玖玖精品中文字幕| 欧美色999| 色先锋资源久久综合5566| 91精品视频免费在线观看| 最新热久久免费视频| 天天爽夜夜爽视频| 黑人一区二区| 精品免费日产一区一区三区免费| 午夜伦理福利在线| 亚洲天堂av图片| 亚洲一级片免费看| 亚洲精品亚洲人成人网在线播放| avtt中文字幕| 亚洲三级电影在线观看| 久久精品第九区免费观看 | 成人久久一区二区三区| 成人日批视频| 亚洲精品456在线播放狼人| 六月丁香婷婷综合| 国产精品色在线| 欧美日韩久久婷婷| 亚洲精品美女91| 日本一区视频在线观看| 99精品在免费线偷拍| 久久伊人免费视频| 香蕉视频网站在线| 欧美日韩亚州综合| 久久综合亚洲色hezyo国产| 26uuu亚洲综合色欧美| 一个色综合久久| 亚洲香蕉网站| 五月天综合网| 高清精品xnxxcom| 国产精品女视频| 麻豆蜜桃在线| 在线播放日韩精品| 丰满熟妇乱又伦| 欧美亚洲国产怡红院影院| 农村黄色一级片| 久久久久亚洲蜜桃| 日本人妻一区二区三区| 日韩一区精品字幕| 日本免费成人网| 久久久影院免费| 精品国产91亚洲一区二区三区www| 另类一区二区| 91精品国产91久久久久久| 久久日韩视频| 亚洲欧洲国产伦综合| 国产成人精品a视频| 日韩欧美国产骚| 久久一区二区三| 亚洲天堂中文字幕| 国产精品久久免费观看| 国产999精品久久| gai在线观看免费高清| 每日更新成人在线视频| 美女av免费观看| 99久久国产综合精品成人影院| 精品一区在线播放| 试看120秒一区二区三区| 国产精品麻豆va在线播放| 涩涩涩视频在线观看| 久久777国产线看观看精品| av中文天堂在线| 国产丝袜一区二区三区免费视频| 精品久久久久久亚洲综合网站| 色偷偷久久人人79超碰人人澡| 久青草视频在线观看| 亚洲女人****多毛耸耸8| av免费播放网站| 久久久久久一级片| 国产精品无码一区二区三| 国产aⅴ精品一区二区三区色成熟| 99re精彩视频| 日韩电影在线观看一区| 日韩中字在线观看| 亚洲人成人一区二区三区| 成人国产在线看| 国产精品porn| 丰满人妻一区二区三区53号| 亚洲最新av| 国产精品h视频| 国产精品久久久久久久久久10秀 | 手机免费看av| 91麻豆国产福利精品| 2一3sex性hd| 成人动漫在线一区| www.啪啪.com| av午夜一区麻豆| 免费看毛片的网站| 波多野洁衣一区| 美女又爽又黄免费| 97国产精品videossex| 中文在线永久免费观看| 99久久国产综合精品色伊| 欧美肉大捧一进一出免费视频| 成人一二三区视频| 中文字幕影片免费在线观看| av激情综合网| 超碰97人人干| 欧美精彩视频一区二区三区| 亚洲毛片亚洲毛片亚洲毛片| 成人免费视频在线观看| 欧美黄色免费观看| 亚洲1区2区3区视频| 国产成人无码精品久久久久| 欧美日韩亚洲成人| 亚洲精品一区二三区| 欧美日韩精品系列| 精品人妻一区二区三区四区不卡| 精品少妇一区二区三区在线视频| 欧美少妇bbw| 亚洲视频在线观看| 老司机福利在线视频| 欧美高清在线播放| 三妻四妾的电影电视剧在线观看| 国产成人一区二区| 日韩成人精品| 蜜桃传媒视频麻豆第一区免费观看 | 欧美电影免费观看| 国产精品自在线| 中文字幕日韩在线| 日韩久久久久久久| 中文字幕一区二区av | 免费精品视频在线| 四虎成人在线播放| 91在线小视频| 国产又黄又粗又猛又爽的| 亚洲激情自拍视频| 欧美一级淫片免费视频黄| 欧美一区二区三区小说| 色呦呦免费观看| 中文日韩在线视频| 3344国产永久在线观看视频| 国产精品久久久久秋霞鲁丝| 日韩成人18| 色一情一乱一伦一区二区三区丨| 欧美.www| 热久久精品免费视频| 丰满少妇久久久久久久| 91成人在线免费视频| 一区二区在线观看视频| av首页在线观看| 欧美不卡视频一区| 国产一区二区三区福利| 午夜精品一区二区三区av| 91麻豆精品| 色狠狠久久av五月综合|| 国产精品成人一区二区网站软件| 37pao成人国产永久免费视频| 国产乱子伦视频一区二区三区| 最近中文字幕无免费| 一区二区三区中文在线观看| 夜夜躁狠狠躁日日躁av| 亚洲一区www| 手机av在线| 高清视频一区二区三区| 羞羞色午夜精品一区二区三区| 欧美精品一区二区三区免费播放| 东方欧美亚洲色图在线| 天天爽天天爽天天爽| 在线视频欧美精品| 日本1级在线| 97国产精品免费视频| aaa国产精品视频| 免费成人深夜夜行网站视频| 日本最新不卡在线| 永久免费毛片在线观看| 色婷婷综合久色| 青青久草在线| 亲子乱一区二区三区电影| 亚洲国产欧美日韩在线观看第一区 | 绿色成人影院| 国产精品久久久久久久小唯西川 | 国产v亚洲v天堂无码久久久 | av片在线免费看| 欧美午夜丰满在线18影院| 日批免费在线观看| 欧美激情精品久久久久久蜜臀| 日韩免费一级| 樱空桃在线播放| 久久99最新地址| 亚洲国产123| 欧美日韩国产三级| 免费a级人成a大片在线观看| 国产精品久久中文| 欧美jizz| 亚洲精品午夜在线观看| 国产视频视频一区| 在线视频 中文字幕| 国产一区二区黑人欧美xxxx| h1515四虎成人| 神马影院一区二区三区| 久久国产尿小便嘘嘘| 中文字幕第69页| 欧美视频一区二区三区四区| 自拍视频在线免费观看| 国产精品91在线| 日韩av久操| 亚洲欧美aaa| 亚洲一区二区四区蜜桃| 亚洲老妇色熟女老太| 中文字幕亚洲二区| 精品视频在线观看网站| 日本道在线视频| 成人av综合一区| 国产免费观看av| 最新亚洲国产精品| 97久久中文字幕| 无码中文字幕色专区| 91在线观看视频| 欧美日韩 一区二区三区| 久久视频在线观看免费| 日韩08精品| av动漫免费看| 欧美国产日本视频| 国产成人a人亚洲精品无码| 久久久这里只有精品视频| www.丝袜精品| 国产91在线免费| 欧美国产一区二区| 精品人妻一区二区三区含羞草| 欧美夫妻性生活xx| 你微笑时很美电视剧整集高清不卡| 欧美精品第三页| 亚洲免费在线观看| 天天干免费视频| 国产精品亚洲激情| 欧美日韩1区| 美女爆乳18禁www久久久久久| 欧美日韩精品是欧美日韩精品| 77thz桃花论族在线观看| 欧美精品v日韩精品v国产精品| 美女一区二区视频| 久久国产精品二区| 在线成人中文字幕| 在线观看视频一区二区三区| 青草青青在线视频| 中文字幕日韩一区二区| 高h调教冰块play男男双性文|