背景:
今天测试提供的管理页面和接口挂了,于是想趁着休假本地搭建一个简单的Python服务器。
调研后觉得TinyDB比较可行,只需要简单管理一个数组的JSON文件就行。
原始数据文件db.json:
结果,几段简单代码尝试后:
from tinydb import TinyDB, Query
db = TinyDB('db.json')Task= Query()# 查询所有数据
results = db.all()
for result in results:
print(result.get('name', 'N/A')
总是报错:
Traceback (most recent call last): File "/Users/xxx/Documents/Projects/auto/Server/ServerTest.py", line 7, in results = db.all() ^^^^^^^^ File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/tinydb/table.py", line 237, in all return list(iter(self)) ^^^^^^^^^^^^^^^^ File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/tinydb/table.py", line 659, in __iter__ for doc_id, doc in self._read_table().items(): ^^^^^^^^^^^^^^^^^^ File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/tinydb/table.py", line 716, in _read_table table = tables[self.name] ~~~~~~^^^^^^^^^^^ TypeError: list indices must be integers or slices, not str
这个错误报错很有误导性。
Debug发现,table默认命名是_default,以为要强制进行name为数字的赋值,但是这也太二。
table = db.table(11111)
还尝试了修改原始JSON数据加上name:db,还是没用。
解决:
于是想着看看这个TinyDB自己生成的数据是啥样的。
改成'_default': {`序号`: {}, `序号`:{}}的格式,
正确的数据结构如下: