如何在 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
之类的查询来查询对象。
这里field1
和field2
的类型是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 中,如何对不同的值进行多个自连接