首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TinyDB中包含多个文件的查询()

TinyDB中包含多个文件的查询()
EN

Stack Overflow用户
提问于 2022-02-11 14:12:47
回答 1查看 244关注 0票数 0

我使用Python + TinyDB,我有2个json文件,并创建了2个TinyDB对象:

代码语言:javascript
复制
db = TinyDB(“db.json”)
forum = TinyDB(“forum.json”)

但是如何使用Query()呢?如何编写Query()只检查db.json或反之亦然的代码?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-15 00:30:23

微数据库中的“查询”是一个特殊的Python对象,它覆盖操作符,因此当使用运算符时,tinyDB引擎可以在“搜索”方法中使用它们来比较它可以到达的所有记录中的值。

它的创建是为了不附加到任何特定的tinyDB对象(“数据库”):它只是绑定在后续搜索中要执行的任何操作数和操作。

搜索必须是特定数据库或tinyDB对象的tinyDB方法。

因此,如果您有两个想要执行相同查询的数据库,只需这样做,在一个数据库中调用.search方法,然后调用另一个数据库。

但是,如果您想要以某种方式进行依赖于这两个数据集的搜索,比如关系搜索: tinyDB不会这样做。它是简单的,不相关的数据。

如果需要,可以编写一个快速脚本,将tinyDB内容转储到SQLite数据库中,然后使用普通SQL (或ORM,轻量级或非轻量级)进行查询。

将tinyDB基倾倒到sqlite可以很简单,只需:

代码语言:javascript
复制
from tinydb import TinyDB
import sqlite3



def get_schema_from_db(db):
    schema = {}
    for record in db.all():
        for key, value in record.items():
            schema.setdefault(key, set()).add(type(value))
    return {key:('REAL' if float in v else 'INTEGER' if int in v else 'TEXT' if str in v else "BLOB") for key, v in schema.items()}


def create_sql_table(sqldb, name, schema):
    createsql = f"CREATE TABLE IF NOT EXISTS {name} (id INTEGER PRIMARY KEY, {{}})".format(", ".join(f"{key} {value}" for key, value in schema.items() ) )
    sqldb.execute(createsql)

def transfer(tydb, sqldb, schema, tablename):
    insertsql = f"INSERT INTO {tablename} ({', '.join(schema.keys())})  VALUES ({', '.join('?' for _ in range(len(schema)))})"
    sqldb.executemany(insertsql, [tuple(rec.values()) for rec in tydb.all()])

# And to use these 3 functions:

tydb = TinyDB("db.json")
sqldb = sqlite3.connect("sql.db")

schema = get_schema_from_db(tydb)
create_sql_table(sqldb, "mytable", schema)
transfer(tydb, sqldb, schema, "mytable")

抱歉,如果上面的代码看起来太复杂了:它基本上是字符串操作才能到达最终的SQL表单--它是“复杂的”,而不是“复杂的”--相当简单。

在此之后,您可以使用SQL格式发布tinyDB数据,并可以发布连接不同表的查询以及其他不需要的内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71081504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档