无法将BTree数据保留在MicroPython中

时间:2018-11-29 17:43:28

标签: b-tree esp32 micropython

我正在ESP32上的MicroPython中开发一个应用程序,其中要发布的数据缓冲区需要在断电/重启后保持不变。

BTree似乎是显而易见的解决方案,但是在我的测试中,我无法使写入BTree db的数据持久化-实际上似乎根本没有将其写入文件。

这是一些示例测试代码;如果有人可以提供任何帮助,我将非常感激,请:

import btree

try:
    f = open("buffer.db", "r+b")
except OSError:
    f = open("buffer.db", "w+b")
db = btree.open(f)

db[b"1"] = b"first"
db[b"2"] = b"second"
db[b"3"] = b"third"
db[b"4"] = b"fourth"
db[b"5"] = b"fifth"

db.flush()

print('The database contains the following:')

for k in db:
    key = k.decode('utf-8')
    val = db[k].decode('utf-8')
    print('Key:', key, 'Value:', val)

print('End of data.')

db.close()
f.close()`

这一切似乎都可以正常工作,并且预期输出为REPL:

The database contains the following:
Key: 1 Value: first
Key: 2 Value: second
Key: 3 Value: third
Key: 4 Value: fourth
Key: 5 Value: fifth
End of data.

但是如果我尝试以下操作:

f = open("buffer.db", "r+b")
db = btree.open(f)

print('The database contains the following:')

for k in db:
    key = k.decode('utf-8')
    val = db[k].decode('utf-8')
    print('Key:', key, 'Value:', val)

print('End of data.')

db.close()
f.close()

... REPL的输出是:

The database contains the following:
End of data.

在检查数据库文件“ buffer.db”时,其大小为0字节。

我确定我犯了一个小学生错误,但是我一生都找不到它。

在此先感谢您的帮助。

=========

更新

根据其他建议,我现在已经在MicroPython的unix端口(在Ubuntu上运行)上对此进行了测试,它可以完美运行,包括成功地将数据写入Btree db文件。

显然,这是MicroPython for ESP32的端口特有的问题。

0 个答案:

没有答案