2013-06-04 8 views
5

Per un modelloCome ottenere colonne/campi con query peewee?

class User(db.Model, BaseUser): 
    name = CharField() 
    phone = CharField() 
    age = IntegerField() 
    points = IntegerField() 

e un elenco di campi, lst = ['phone', 'name', 'points']

C'è un modo per ottenere la vostra query per restituire i campi in lst?

Non riesco a trovare un esempio nello docs, ma sembra che l'ORM di Django abbia qualcosa come ...get().values(lst).

ho provato passando la lista come argomento a User.select(), ma ottenere

TypeError: issubclass() arg 1 must be a class 

Credo che avrei potuto fare qualcosa di simile [getattr(obj, field) for field in lst] con un oggetto risultante, ma sembra che ci dovrebbe essere un modo migliore?

Aggiornamento: il collegamento a values nei documenti di Django è here.

risposta

1

Non sei sicuro di quale sia il tuo problema, ma hai provato a usare con l'utilizzo di flask-peewee?

def user_query(): 

    lst_result = User.select().where(User.name == lst.name) 

    return object_list('yourtemplate.html', lst_result, 'list_user') 

Mi dispiace se non molto aiuto.

Saluti.

+0

Grazie, ma sembra che questo sia per i modelli Flask no? (che non uso) – beardc

8

È possibile utilizzare:

User.select(User.phone, User.name, User.points) 

http://peewee.readthedocs.org/en/latest/peewee/api.html#SelectQuery

+1

Grazie, ho usato in questo modo (in realtà, qualcosa come 'User.select (* [getattr (Utente, f) per f in lst])'), ma mi chiedevo se c'è un modo per passare direttamente una lista di stringhe di nomi di campi come il metodo 'values' di Django. Aggiornerò la domanda con un link ai documenti a cui mi riferisco. – beardc

+0

Btw, adoro l'ORM :) – beardc

3

È possibile utilizzare:

lst = [User.phone, User.name, User.points] 

User.select(*lst) 

Io uso questo metodo per scegliere i campi in modo dinamico SELECT da un elenco predefinito.

0

Questo è un vecchio, ma ho trovato una risposta di recente.

Data un'istanza u dalla tabella Utente, quindi u._data restituisce un dizionario con il nome del campo come chiavi.

Ad esempio:

db.connect() # db was established with connection parameters for your database 
u = User.get() # get one record 
print u._data # get dictionary with field names as keys 
db.close() # free up your connection 
0

La soluzione a questo è utilizzare tuples o dicts.

Ad esempio per le tuple dalla documentazione:

stats = Stat.select(Stat.url, fn.Count(Stat.url)).group_by(Stat.url).tuples() 

# iterate over a list of 2-tuples containing the url and count 
for stat_url, stat_count in stats: 
    print stat_url, stat_count 

Esempio: per dicts dalla documentazione:

stats = Stat.select(Stat.url, fn.Count(Stat.url).alias('ct')).group_by(Stat.url).dicts() 

# iterate over a list of 2-tuples containing the url and count 
for stat in stats: 
    print stat['url'], stat['ct'] 

Ricordate che i risultati sono iteratori, quindi se si desidera che l'intero tupla o dict in memoria è necessario inizializzarlo con i metodi di default: tuple(stats) o dict(stats).

More info here

Problemi correlati