Python PynamoDB用Flas创建动态查询

2024-06-16 18:32:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用PynamoDB并尝试从flask请求生成对属性的动态查询/扫描。假设以下模型:

class Test(Model):
    class Meta:
        table_name = "test"
        region = "us-west-2"
    a = NumberAttribute(hash_key=True)
    b = NumberAttribute(range_key=True)
    c = UnicodeAttribute()

我把它固定在Flask上,这样当用户发送带有查询参数的请求时,比如?a=123&b=456,我可以把它转换成PynamoDB中的一个过滤器,以返回与这两个过滤器匹配的记录的结果。在

以下操作适用于单个属性:

^{pr2}$

我希望能够将此附加到动态数量的属性上(例如,除了a、b和c)

我尝试将其转换为元组,但似乎出现以下错误:

>>> query = (operator.eq(Test.a, 123), operator.eq(Test.b, 456))
>>> list(Test.scan(*query))

但我得到了以下错误:

Invalid type for parameter Segment, value: b = {'N': '1'}, type: <class 'pynamodb.expressions.condition.Comparison'>, valid types: <type 'int'>, <type 'long'>

关于如何构造一个动态过滤器来传入PynamoDB扫描方法有什么想法吗?在


Tags: keytesttrue过滤器flask属性type错误
2条回答

怎么样:

q = { 'a': 123, 'b': 456 }

query = None
for fieldname in q:
    field = getattr(Test, fieldname, None)
    if field is None: continue
    clause = field == q[fieldname]
    query = clause if query is None else query & clause

print(list(Test.scan(cond)))    

您是否尝试过:

query = (Test.a == 123) | (Test.b == 456)
list( Test.scan(query))

相关问题 更多 >