日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

dbm数据库详解【flask】【dbm.gun解决】

發布時間:2023/12/16 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dbm数据库详解【flask】【dbm.gun解决】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

DBM

dbm數據庫是利用簡單的字符串值作為鍵來訪問包含字符串的記錄。

開發遇到的問題

之前的項目開發使用的dbm.gnu類型,而這個類型在Linux系統下可以正常使用,在windows系統下無法使用,在網上查閱了很多質料也沒有解決,也遇到有人發帖求助,始終沒有實質性的解決方法。
假設dbm.gun不能在window下運行的話,那么方法只有這個,就是轉化為windows可以運行的文件。

識別dbm類型

whichdb() 方法會識別數據庫

import dbmprint(dbm.whichdb('config'))


發現是dbm,gun
如果我們嘗試打開這個文件,會報以下錯誤

dbm.error: db type is dbm.gnu, but the module is not available

使用Linux嘗試解決

傳入虛擬機里的linux系統,引入包,發現,可以正常讀取dbm數據庫。

獲取到以下完整數據庫內容:

b'btn_2' = b'\xe8\xb5\x9b\xe4\xba\x8b\xe8\xaf\xb4\xe6\x98\x8e|http://btwl.zhimaju.com/html/article_details.html?v=1634109894&id=1c3bc326-373a-4439-8dff-8a9b4e63a713' b'past_matchs' = b',2021|\xe5\x8c\x85\xe5\xa4\xb4\xe5\xb8\x82\xe7\xac\xac\xe4\xba\x8c\xe7\x95\x8c\xe6\x96\x87\xe5\x8c\x96\xe6\x97\x85\xe6\xb8\xb8\xe5\x88\x9b\xe6\x84\x8f\xe4\xbd\x9c\xe5\x93\x81\xe5\xa4\xa7\xe8\xb5\x9b' b'pw_nums' = b'3' b'btn_3' = b'\xe5\xa4\xa7\xe8\xb5\x9b\xe6\x88\x90\xe7\xbb\xa9|/result' b'btn_1' = b'\xe4\xb8\x8a\xe4\xbc\xa0\xe4\xbd\x9c\xe5\x93\x81|/new_post' b'match_name' = b'\xe5\x8c\x85\xe5\xa4\xb4\xe5\xb8\x82\xe7\xac\xac\xe4\xba\x8c\xe7\x95\x8c\xe6\x96\x87\xe5\x8c\x96\xe6\x97\x85\xe6\xb8\xb8\xe5\x88\x9b\xe6\x84\x8f\xe4\xbd\x9c\xe5\x93\x81\xe5\xa4\xa7\xe8\xb5\x9b' b'upload' = b'false' b'btn_4' = b'\xe5\xbe\x80\xe6\x9c\x9f\xe5\x9b\x9e\xe9\xa1\xbe|/past' b'time' = b'2' b'match' = b'2021' b'time_3_posts' = b'' b'btn_5' = b'\xe8\xaf\x84\xe5\xa7\x94\xe5\x85\xa5\xe5\x8f\xa3|/admin' b'time_2_posts' = b'200'

在Linux系統獲取數據庫內容代碼:

import dbm db_config=dbm.open('config','c')k = db_config.firstkey() while k != None:print(k)k = db_config.nextkey(k) print("__________________") if db_config is not None:for key in db_config.keys():print('{} = {}'.format(key, db_config[key])) else:print('dbm object is None!')

爆出的表名字:

b'btn_2' b'past_matchs' b'pw_nums' b'btn_3' b'btn_1' b'match_name' b'upload' b'btn_4' b'time' b'match' b'time_3_posts' b'btn_5' b'time_2_posts'

我們拿到了dbm.gun里面的完整數據庫內容,下一步就是清洗為dbm.dumb

轉換代碼

import dbm with dbm.open('config', 'c') as db:db['btn_2'] = '賽事說明|http://btwl.zhimaju.com/html/article_details.html?v=1634109894&id=1c3bc326-373a-4439-8dff-8a9b4e63a713'db['past_matchs'] = ',2021|包頭市第二界文化旅游創意作品大賽'db['pw_nums'] = '3'db['btn_3'] = '大賽成績|/result'db['btn_1'] = '上傳作品|/new_post'db['match_name'] = '包頭市第二界文化旅游創意作品大賽'db['upload'] = 'false'db['btn_4'] = '往期回顧|/past'db['time'] = '2'db['match'] = '2021'db['time_3_posts'] = ''db['btn_5'] = '評委入口|/admin'db['time_2_posts'] = '200'

運行這個py文件,生成三個dbm文件:

替換

將這三個文件,替換原來的dbm.gun文件,運行項目,完美解決了,win不兼容dbm.gnu的問題。

注意:dbm.gun與dbm.dumb文件是不兼容的,倆種類型差別很大,不能相互通用。

含意
‘r’
以只讀方式打開現有數據庫(默認)
‘w’
以讀寫方式打開現有數據庫
‘c’
以讀寫方式打開數據庫,如果不存在則創建它
‘n’
始終創建一個新的空數據庫,以讀寫方式打開

上面的rwcn是可選的 flag 參數。dbm.open()里面的flag參數可改變的。

總結

以上是生活随笔為你收集整理的dbm数据库详解【flask】【dbm.gun解决】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。