栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

DBM

dbm数据库是利用简单的字符串值作为键来访问包含字符串的记录。

开发遇到的问题

之前的项目开发使用的dbm.gnu类型,而这个类型在Linux系统下可以正常使用,在windows系统下无法使用,在网上查阅了很多质料也没有解决,也遇到有人发帖求助,始终没有实质性的解决方法。
假设dbm.gun不能在window下运行的话,那么方法只有这个,就是转化为windows可以运行的文件。

识别dbm类型

whichdb() 方法会识别数据库

import dbm

print(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'xe8xb5x9bxe4xbax8bxe8xafxb4xe6x98x8e|http://btwl.zhimaju.com/html/article_details.html?v=1634109894&id=1c3bc326-373a-4439-8dff-8a9b4e63a713'
b'past_matchs' = b',2021|xe5x8cx85xe5xa4xb4xe5xb8x82xe7xacxacxe4xbax8cxe7x95x8cxe6x96x87xe5x8cx96xe6x97x85xe6xb8xb8xe5x88x9bxe6x84x8fxe4xbdx9cxe5x93x81xe5xa4xa7xe8xb5x9b'
b'pw_nums' = b'3'
b'btn_3' = b'xe5xa4xa7xe8xb5x9bxe6x88x90xe7xbbxa9|/result'
b'btn_1' = b'xe4xb8x8axe4xbcxa0xe4xbdx9cxe5x93x81|/new_post'
b'match_name' = b'xe5x8cx85xe5xa4xb4xe5xb8x82xe7xacxacxe4xbax8cxe7x95x8cxe6x96x87xe5x8cx96xe6x97x85xe6xb8xb8xe5x88x9bxe6x84x8fxe4xbdx9cxe5x93x81xe5xa4xa7xe8xb5x9b'
b'upload' = b'false'
b'btn_4' = b'xe5xbex80xe6x9cx9fxe5x9bx9exe9xa1xbe|/past'
b'time' = b'2'
b'match' = b'2021'
b'time_3_posts' = b''
b'btn_5' = b'xe8xafx84xe5xa7x94xe5x85xa5xe5x8fxa3|/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参数可改变的。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/766789.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号