Python 对字典列表执行用户定义的查询

Python 对字典列表执行用户定义的查询,python,sql,Python,Sql,我有一组用户需要使用自己的查询字符串查询的数据。当前的解决方案创建了一个临时内存中的sqlite数据库,查询是针对该数据库运行的 数据集是一个“平面”字典列表,即没有嵌套数据。查询字符串不需要是SQL,但使用现有的查询框架应该很容易定义 它需要支持排序(升序、降序、自定义)和过滤 这个问题的目的是获得一系列可能适用于这个用例的不同解决方案 import sqlite3 items = [ {'id': 1}, {'id': 2, 'description': 'This is

我有一组用户需要使用自己的查询字符串查询的数据。当前的解决方案创建了一个临时内存中的sqlite数据库,查询是针对该数据库运行的

数据集是一个“平面”字典列表,即没有嵌套数据。查询字符串不需要是SQL,但使用现有的查询框架应该很容易定义

它需要支持排序(升序、降序、自定义)和过滤

这个问题的目的是获得一系列可能适用于这个用例的不同解决方案

import sqlite3

items = [
    {'id': 1},
    {'id': 2, 'description': 'This is a description'},
    {'id': 3, 'comment': 'This is a comment'},
    {'id': 4, 'height': 1.78}
]

# Assemble temporary sqlite database
conn = sqlite3.connect(':memory:')
cur = conn.cursor()

knownTypes = { "id": "real", "height": "real", "comment": "text" }

allKeys = list(set().union(*(d.keys() for d in items)))
allTypes = list(knownTypes.get(k, "text") for k in allKeys)

createTable_query = "CREATE TABLE data ({});".format(", ".join(["{} {}".format(x[0], x[1]) for x in zip(allKeys, allTypes)]))
cur.execute(createTable_query)
conn.commit()

qs = ["?" for i in range(len(allKeys))]
insertRow_query = "INSERT INTO data VALUES ({});".format(", ".join(qs))

for p in items:
    vals = list([p.get(k, None) for k in allKeys])
    cur.execute(insertRow_query, vals)
conn.commit()

# modify user query here
theUserQuery = "SELECT * FROM data"

# Get data from query
data = [row for row in cur.execute(theUserQuery)]
这就是我要找的


它不执行SQL,但执行查询字符串-这是执行复杂的用户定义排序和筛选的简单方法。

您的问题是什么?什么不起作用?如果要寻找不同的解决方案,请尝试感谢sugestion@Parfait,上面的方法确实有效——但我讨厌重新发明轮子。我想我正在寻找类似
query(dataset,SQLqueryString)
的东西,它可以安全地将用户SQL转换为列表压缩。