如何在pynamodb ORM中使用多个条件

时间:2017-12-19 09:33:08

标签: python orm amazon-dynamodb

我正在使用PynamoDB和Flask,我希望使用field1=value1 and field2=value2等查询来查询对象。

此处field1field2属于NumberAttribute()类型。

from pynamodb.models import Model
from pynamodb.attributes import UnicodeAttribute, NumberAttribute,UTCDateTimeAttribute

class SMSQuota(Model):
    id = UnicodeAttribute(hash_key=True)
    user_id = NumberAttribute(null=True)
    sms_quota = NumberAttribute()
    validity_date = UTCDateTimeAttribute(null=True)
    class Meta:
        table_name = 'SMSQuota'
        region = 'us-west-2'
        write_capacity_units = 1
        read_capacity_units = 1

如何在PynamoDB ORM中完成?

Items = SMSQuota.query(??,filter_condition = ??)

3 个答案:

答案 0 :(得分:0)

您可以查询包含查询字词的模型,如下所示:

SomeModel.field1 == 'value1' & SomeModel.field2 == 'value2'

有关如何使用pynamodb的更多帮助:http://pynamodb.readthedocs.io/en/latest/quickstart.html

答案 1 :(得分:0)

我一直在尝试类似于@Delvidi提到的文档中显示的查询,但是它不断抛出TypeError

TypeError: unsupported operand type(s) for &: 'bool' and 'UnicodeAttribute'

该示例显示:SomeModel.field1 == 'value1' & SomeModel.field2 == 'value2'

但是,如果您在Conditional Expressions的文档中进一步查找,则表明必须要有括号。所以...

results = MyModel.query(user, (MyModel.field1 == True) & (MyModel.field2 == "a"))

答案 2 :(得分:0)

我在这里遇到了一个非常相似的问题,我相信您需要的查询与此类似:

# id must be the has_key as you wrote in your model
items = SMSQuota.query(id, filter_condition=((SMSQuota.field1==value1) & (SMSQuota.field2==value2))

我必须确保正确使用括号以避免任何“类型错误:不支持的操作数类型”

最好的问候