gpt4 book ai didi

database - Google App Engine 数据库值不递增

转载 作者:搜寻专家 更新时间:2023-10-30 22:22:04 24 4
gpt4 key购买 nike

这里有一些代码无法正常工作。每次查询数据库时,我都会得到 0 或 1 的选项值,并且数据库中的值不会增加,即使如您所见,在第 86 和 89 行中,值正在增加。知道这里出了什么问题吗?我在 Google App 引擎上使用 Django。

        user_result = request.POST['json']
65 user_result = json.loads(user_result)
66 user_country = get_user_country(user_result)
67 question_number = get_question_number(user_result)
68 answered_option = get_answered_option(user_result)
69
70 country_option_1 = 0
71 country_option_2 = 0
72 world_option_1 = 0
73 world_option_2 = 0
74
75 """
76 Get already existing record for the question for the contry, or create
77 new one and put/update in db
78 """
79
80 country_wide_data = db.GqlQuery("SELECT * FROM CountryWideData WHERE country = :1 AND questionNo = :2", user_country, question_number)
81 flag = False
82 for i in country_wide_data:
83 flag = True
84 if flag:
85 if answered_option==1:
86 country_wide_data[0].optionOne = country_wide_data[0].optionOne + 1
87
88 elif answered_option==2:
89 country_wide_data[0].optionTwo = country_wide_data[0].optionTwo + 1
90 country_option_1 = country_wide_data[0].optionOne
91 country_option_2 = country_wide_data[0].optionTwo
92 country_wide_data[0].put()
93 else:
94 country_wide_data = CountryWideData(country=user_country, questionNo=question_number)
95
96 if answered_option==1:
97 country_wide_data.optionOne = 1
98 country_wide_data.optionTwo = 0
99 elif answered_option==2:
100 country_wide_data.optionOne = 0
101 country_wide_data.optionTwo = 1
102 country_option_1 = country_wide_data.optionOne
103 country_option_2 = country_wide_data.optionTwo
104 country_wide_data.put()

最佳答案

您永远不会使用 fetch() 来实际执行您在第 80 行创建的 GqlQuery。

试试这个:

country_wide_data = db.GqlQuery("SELECT * FROM CountryWideData WHERE country = :1 AND questionNo = :2", user_country, question_number).fetch()

顺便说一句,您将希望在事务内部执行此递增操作;否则,如果有多个请求可以执行此代码,您将获得竞争条件,并且计数将不准确。有关交易的文档在这里:http://code.google.com/appengine/docs/python/datastore/transactions.html

通常,您会想要获取创建或更新这些实体的代码并将它们放入函数中,如下所示:

def increment_existing_data(key, answered):
cwd_to_incr = db.get(key)
if answered == 1:
cwd_to_incr.optionOne += 1
elif answered == 2:
cwd_to_incr.optionTwo += 1
cwd_to_incr.put()

def create_new_data(answered, user_country, question_number):
new_data = CountryWideData(country=user_country, questionNo=question_number)
if answered == 1:
new_data.optionOne = 1
new_data.optionTwo = 0
elif answered == 2:
new_data.optionOne = 0
new_data.optionTwo = 1
new_data.put()

然后,您可以使用 db.run_in_transacation 方法调用这些函数,如下所示:

country_wide_data = db.GqlQuery("SELECT * FROM CountryWideData WHERE country = :1 AND questionNo = :2", user_country, question_number).get()
if country_wide_data is not None:
db.run_in_transaction(increment_existing_data, country_wide_data.key(), answered_option)
else:
db.run_in_transaction(create_new_data, answered_option, user_country, question_number)

关于database - Google App Engine 数据库值不递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2309955/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com