我使用Python + TinyDB,我有2个json文件,并创建了2个TinyDB对象:
db = TinyDB(“db.json”)
forum = TinyDB(“forum.json”)但是如何使用Query()呢?如何编写Query()只检查db.json或反之亦然的代码?
发布于 2022-04-15 00:30:23
微数据库中的“查询”是一个特殊的Python对象,它覆盖操作符,因此当使用运算符时,tinyDB引擎可以在“搜索”方法中使用它们来比较它可以到达的所有记录中的值。
它的创建是为了不附加到任何特定的tinyDB对象(“数据库”):它只是绑定在后续搜索中要执行的任何操作数和操作。
搜索必须是特定数据库或tinyDB对象的tinyDB方法。
因此,如果您有两个想要执行相同查询的数据库,只需这样做,在一个数据库中调用.search方法,然后调用另一个数据库。
但是,如果您想要以某种方式进行依赖于这两个数据集的搜索,比如关系搜索: tinyDB不会这样做。它是简单的,不相关的数据。
如果需要,可以编写一个快速脚本,将tinyDB内容转储到SQLite数据库中,然后使用普通SQL (或ORM,轻量级或非轻量级)进行查询。
将tinyDB基倾倒到sqlite可以很简单,只需:
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数据,并可以发布连接不同表的查询以及其他不需要的内容。
https://stackoverflow.com/questions/71081504
复制相似问题