gpt4 book ai didi

python shelve ... bsddb deprecated ...如何搁置以使用另一个数据库?

转载 作者:太空宇宙 更新时间:2023-11-03 14:32:55 24 4
gpt4 key购买 nike

我有一个在 OS X 上用 python 2.7.2 开发的应用程序。我使用模块 shelve 并且在 mac 上似乎默认为 bsddb。该程序不会在装有 ActiveState python 2.7 的 Windows 7 机器上运行,因为模块 bsddb 不存在并且不在 ActiveState 的包管理器 (pypm) 中。 ActiveState 的文档说在 v 2.6 时已弃用。我猜它会尝试 bdddb,因为创建数据库的 OS X python 默认为 bsddb。当我删除搁置数据库并在 Windows 上运行它时,它很乐意使用其他一些底层数据库。 Mac 的 python 也乐此不疲。

所以我认为我应该强制使用非 bdsdb 后端来搁置。就像 gdbm 模块一样。但我不知道该怎么做。

最佳答案

您可以在调用shelve.open 之前通过设置anydbm._defaultmod 来设置创建的数据库的类型。

这适用于 Python 2.6(也许适用于 2.7?),但由于 anydbm._defaultmod 是一个私有(private)变量,请注意这是一个 hack。

anydbm._defaultmod=__import__('gdbm')

例如:

import anydbm
import whichdb
import contextlib

anydbm._defaultmod=__import__('gdbm')
filename='/tmp/shelf.dat'
with contextlib.closing(shelve.open(filename)) as f: pass
result=whichdb.whichdb(filename)

print(result)
# gdbm

关于python shelve ... bsddb deprecated ...如何搁置以使用另一个数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7523205/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com