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

Posted

技术标签:

【中文标题】如何在 pynamodb ORM 中使用多个 where 条件【英文标题】:How to use multiple where conditions in pynamodb ORM 【发布时间】:2017-12-19 09:33:08 【问题描述】:

我正在使用 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 = ?? )

【问题讨论】:

【参考方案1】:

您可以结合查询词查询您的模型,如下所示:

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

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

【讨论】:

【参考方案2】:

我一直在尝试类似于@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"))

【讨论】:

【参考方案3】:

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

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

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

最好的问候

【讨论】:

以上是关于如何在 pynamodb ORM 中使用多个 where 条件的主要内容,如果未能解决你的问题,请参考以下文章

python 以下是如何使用PynamoDB创建带索引的表 - http://jlafon.io/pynamodb.html

在使用 ORM 的 Django 中,如何对不同的值进行多个自连接

如何在 laravel 5.4 orm 中执行多个 has() /orHas()

如何在 C# 中实现 ORM

如何在 Kohana 3 中链接多个 ORM 关系?

我想在 prisma orm 中使用多个数据库