Domanda

Non riesco ad allenarmi su come ottenere oggetti dall'archivio dati di Google App Engine usando get_by_id. Ecco il modello

from google.appengine.ext import db

class Address(db.Model):
  description = db.StringProperty(multiline=True)
  latitude = db.FloatProperty()
  longitdue = db.FloatProperty()
  date = db.DateTimeProperty(auto_now_add=True)

Posso crearli, metterli e recuperarli con gql.

address = Address()
address.description = self.request.get('name')
address.latitude = float(self.request.get('latitude'))
address.longitude = float(self.request.get('longitude'))
address.put()

Un indirizzo salvato ha valori per

>> address.key()
aglndWVzdGJvb2tyDQsSB0FkZHJlc3MYDQw
>> address.key().id()
14

Posso trovarli usando il tasto

from google.appengine.ext import db
address = db.get('aglndWVzdGJvb2tyDQsSB0FkZHJlc3MYDQw')

Ma non riesco a trovarli per ID

>> from google.appengine.ext import db
>> address = db.Model.get_by_id(14)

L'indirizzo è Nessuno, quando provo

>> Address.get_by_id(14)
AttributeError: type object 'Address' has no attribute 'get_by_id'

Come posso trovare per ID?

EDIT: Si scopre che sono un idiota e stavo cercando di trovare un modello di indirizzo in una funzione chiamata indirizzo. Grazie per le tue risposte, ho contrassegnato Brandon come la risposta corretta quando è arrivato per primo e ho dimostrato che dovrebbe funzionare tutto.

È stato utile?

Soluzione

L'ho appena provato su shell.appspot.com e sembra che funziona bene:

Google Apphosting/1.0
Python 2.5.2 (r252:60911, Feb 25 2009, 11:04:42) 
[GCC 4.1.0]

>>> class Address(db.Model):
  description = db.StringProperty(multiline=True)
  latitude = db.FloatProperty()
  longitdue = db.FloatProperty()
  date = db.DateTimeProperty(auto_now_add=True)

>>> addy = Address()
>>> addyput = addy.put()
>>> addyput.id()
136522L
>>> Address.get_by_id(136522)
<__main__.Address object at 0xa6b33ae3bf436250>

Altri suggerimenti

La chiave di un'app è un elenco di tuple (kind, id_or_name) - per le entità root, sempre lunghe solo un elemento. Pertanto, un ID da solo non identifica un'entità - è richiesto anche il tipo di entità. Quando chiami db.Model.get_by_id (x), chiedi l'entità con chiave (Modello, x). Quello che vuoi è chiamare Address.get_by_id (x), che recupera l'entità con chiave (Indirizzo, x).

Devi usare il tipo lungo in get_by_id (" qui "). Il tipo Int deve contenere un messaggio di errore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top