对StringProperty的gql查询中的where insensitive where子句

jas*_*nmw 12 google-app-engine gql gqlquery

使用google appengine数据存储区,有没有办法执行gql查询,在不区分大小写的StringProperty数据类型上指定WHERE子句?我并不总是确定该值的大小写.文档指定where对我的值区分大小写,有没有办法使这个不敏感?

例如db模型将是这样的:

from google.appengine.ext import db
class Product(db.Model):
    id = db.IntegerProperty()
    category = db.StringProperty()
Run Code Online (Sandbox Code Playgroud)

数据看起来像这样:

id         category
===================
1          cat1
2          cat2
3          Cat1
4          CAT1
5          CAT3
6          Cat4
7          CaT1
8          CAT5
Run Code Online (Sandbox Code Playgroud)

我想说

gqlstring = "WHERE category = '{0}'".format('cat1')
returnvalue = Product.gql(gqlstring)
Run Code Online (Sandbox Code Playgroud)

returnvalue包含

id         category
===================
1          cat1
3          Cat1
4          CAT1
7          CaT1
Run Code Online (Sandbox Code Playgroud)

Pet*_*ore 14

我不认为在数据存储区中有这样的运算符.

你是否控制了类别数据的输入?如果是这样,您应该选择一个规范形式来存储它(全部小写或全部大写).如果由于某种原因需要存储原始案例,那么您可以只存储两列 - 一列是原始列,另一列是标准列.这样你就可以做一个普通的WHERE子句.


Nic*_*son 6

数据存储区不支持不区分大小写的比较,因为您无法索引使用它们的查询(禁止转换值的索引).彼得建议,除了标准版本之外,解决方案是存储字符串的标准化版本.AETycoon库中的属性类可能会有所帮助,尤其是DerivedProperty.