【发布时间】:2012-08-15 05:18:16
【问题描述】:
我正在使用 dataStore 试图执行一个简单的查询,但它没有按预期工作:
class User_Machine(db.Model):
machine_id = db.IntegerProperty (required = True)
username = db.StringProperty (required = True)
last_call = db.DateTimeProperty (auto_now = True)
def query(username, machine_id)
q = db.GqlQuery('SELECT * FROM User_Machine WHERE username=:1 AND machine_id=:2', username, machine_id)
r = q.get()
return r
print query('uherran', 23)
我的回答是:
无
我期待着阅读这条记录:
datastopre 查看器中的值是:
Enitty Kind User_Machine
Entity Key ahBkZXZ-Z2VzdG9yYXZpc29zchILEgxVc2VyX01hY2hpbmUYKAw
ID 40
username (string) uherran
last_call (datetime) 2012-08-19 09:57:35
machine_id (long) 23
我对查询如何进行的理解一定是完全错误的。
有人可以帮忙吗?
谢谢。
事实上。我稍微调整了一下,但我的代码更清楚了,但似乎我没有进行适当的错误检查。
代码是:
def check_machine_username(self, machine_id, username):
key='CHECK_MACHINE_USERNAME_'+machine_id+'_'+username
q= memcache.get(key)
if q:
return True
else:
logging.info(username)
logging.info(machine_id)
q = dbstructure.User_Machine.all()
q.filter('username = ', username)
q.filter('machine_id = ', machine_id)
if q.get():
loggin.info('query right')
memcache.set(key,True)
return True
else:
logging.info('query wrong')
return False
无论我的 User_machine 数据库中有什么,查询总是返回空。
【问题讨论】:
-
正如@GuidoVanRossum 所说,您可能将一个字符串作为您的
machine_id传递,特别是当您在check_machine_username中定义key时没有错误(因为它应该尝试连接一个字符串和一个整数,这会失败)。
标签: python google-app-engine datastore gql