将多个 tinyDB 数据库添加在一起

问题描述

如何将多个 tinyDB(基于文档的数据库数据库添加到一起而不出现 AssertionError 错误? 我试图在这个例子中添加 12 个 tinyDB 数据库

文件结构:

enter image description here

每个编号的文件看起来像这样:

{
    "_default": {
        "1": {
            "Strategy": "MAShift","Symbol": "AAVE/USD","Timeframes": [
                "30T"
            ],"Parameters": {
                "atr": 14,"sma": 5,"longLine": 3,"shortLine": 5,"slMultipier": 12,"Leverage": 1
            },"Start": "2020-10-13 12:00:00","End": "2021-04-26 11:30:00","Duration (days)": 194,"Equity Start [$]": 10000,"Equity Final [$]": 90470.5732,"Return [%]": 804.71,"Max. Drawdown [%]": -28.1,"Win rate [%]": 69.12,"Total Trades": 570,"Avg. Trade [%]": 0.43,"Avg. winning Trade [%]": 1.88,"Avg. losing Trade [%]": -2.81
        },...
    }
}

我的代码

from tinydb import TinyDB

resultsTotalDb = TinyDB(f'db/backtestingResultstotal.json')

for i in range(12):
    resultsDb = TinyDB(f'db/backtestingResults{i}.json')
    for result in resultsDb.all():
        resultsTotalDb.insert(result)

错误

AssertionError: doc_id 1 already exists

解决方法

您可以根据数据库计数器重新计算新的文档 ID:

from tinydb import TinyDB
from tinydb.table import Document

# ...

for i in range(12):
    resultsDb = TinyDB(f"db/backtestingResults{i}.json")

    for result in resultsDb.all():
        new_id = i * 100000000 + result.doc_id
        resultsTotalDb.insert(Document(result,doc_id=new_id))