в gql (appengine), как мне проверить, существует ли сущность, соответствующая 2 фильтрам, прежде чем вставлять новый? - PullRequest
0 голосов
/ 28 сентября 2010

2 отфильтрованных поля на самом деле будут уникальным индексом в SQL, поэтому я хочу посмотреть, существует ли сущность на основе этих 2 полей, прежде чем вставлять новое.

в настоящее время у меня есть:

t2get = db.GqlQuery("SELECT __key__ FROM Talk2 WHERE ccc = :1 AND ms = :2", c, theDay)
for x in t2get:
    theKey = x[0]
if theKey:
    t2 = Talk2.get(theKey)
else:
    t2 = Talk2()

какие ошибки с:

UnboundLocalError: local variable 'theKey' referenced before assignment

, если сущность не существует.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 28 сентября 2010

Если два поля на самом деле будут уникальным индексом, возможно, вам следует вместо этого использовать их в качестве имени ключа.Это будет быстрее, и при необходимости вы сможете использовать транзакцию.

def txn():
  key_name = "%d.%d." % (c, theDay)
  t2 = Talk2.get_by_key_name(key_name)
  if not t2:
    t2 = Talk2(key_name=key_name)
    t2.put()

db.run_in_transaction(txn)
0 голосов
/ 28 сентября 2010

Я понял это.После нескольких часов работы в сети, еще 10 минут находят мне ответ:

t2 = Talk2.all().filter('ccc =', c).filter('ms =', theDay).get()

возвращает первую сущность (если есть), готовую для редактирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...