Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在谷歌应用程序引擎中输入类别的不同方式_Python_Google App Engine_Gql - Fatal编程技术网

Python 在谷歌应用程序引擎中输入类别的不同方式

Python 在谷歌应用程序引擎中输入类别的不同方式,python,google-app-engine,gql,Python,Google App Engine,Gql,我正在寻找应用程序引擎中处理类别的最智能/各种方式。我认为有两种方法: 使用方式A: companycategory = db.ReferenceProperty(mycategories, collection_name = 'categories') 根据url中的示例: class Category(db.Model) name = db.StringProperty(required=True) city = db.ReferenceProperty(City, c

我正在寻找应用程序引擎中处理类别的最智能/各种方式。我认为有两种方法:

使用方式A:

 companycategory = db.ReferenceProperty(mycategories, collection_name = 'categories')
根据url中的示例:

class Category(db.Model)
    name = db.StringProperty(required=True)
    city = db.ReferenceProperty(City, collection_name = 'categories')
方法B:

companycategory = db.CategoryProperty(default="A", choices=["A", "AA", "B", "C"], required=True)
还有什么要考虑的吗?A使用了一个表和另一个对象模型,这似乎有些过分,但B将文本放入字段的方式意味着打字错误很可能会慢慢出现。除了将整数放入类别字段并手动引用之外,还有其他聪明的方法吗?还是我要用另一个模型/桌子来咬紧牙关

提前感谢

您可以查看其他选项

在AppEngine中处理类别的“最智能”方式因您的用例而异

您是否有预定义的类别列表,或者您是否允许用户动态添加自己的类别?根据您的具体情况,最佳答案可能会有所不同

在大多数使用AppEngine的情况下,您通常希望使用“非规范化”选项。它在数据存储写入和读取方面为您节省了资金。因为它写和读的更少,所以速度也更快

您也可以使用
db.StringListProperty()
而不是
db.CategoryProperty()
来允许公司在多个类别下归档

如果您提前知道可能的类别,我会做类似的事情:

class Company(db.Model):
    name = db.StringProperty()
    category = db.StringListProperty() #to allow multiple categories

#Creating a company
company = Company()
company.name = "XYZ Car Rental Corporation"
company.category = ["NEW YORK","CAR RENTAL", "CORPORATION"] #City and Company Category. I would make them all uppercase to prevent case-sensitive/typo issues.
company.put()

#querying
query = Company.all()
query.filter('category',"NEW YORK")
results = query.fetch(10)  #this returns Company entities with "NEW YORK" in their category list

#You can also do multiple categories (AND)
query = Company.all()
query.filter('category',"NEW YORK")
query.filter('category',"CORPORATION")
results = query.fetch(10)  #this returns Company entities with "NEW YORK" and "CORPORATION" in their category list

<>如果您的用户动态地创建类别,并且有相对较少(少于1000个)实体在某个类别之下,我建议。

@戴夫:如果您开始更新,您可能需要考虑使用新的NDB模块代替DB:。另外,由于您担心拼写错误等问题,您可以为所有有效类别创建一个单独的存储,并检查输入,以确保存储的内容是适当的。谢谢。我想我的一个复杂问题是Django框架。字符串方式虽然不如键那么优雅,但在这个用例中效果很好。然而,我在使用Django模板时遇到了问题,我得到了以下错误:
code
BadValueError:Property companycategory是['B','I','o'];当我使用以下
code
companycategory=db.StringListProperty时,必须是['Bio'、'Pharm'、'I'、'']
code
中的一个(default=“Bio”、choices=[“Bio”、“Pharm”、“I”、“S”],required=True)
code
@Dave:将default=“Bio”更改为default=[“Bio”]。StringListProperty需要一个字符串列表(即使是一个字符串列表也可以),但不是字符串。