2013-06-04 15 views
5

,Peewee sorgusuyla sütunlar/alanlar nasıl alınır? Bir model</p> <pre><code>class User(db.Model, BaseUser): name = CharField() phone = CharField() age = IntegerField() points = IntegerField() </code></pre> <p>ve alanların listesi için

lst = ['phone', 'name', 'points']lst alanları dönmek için sorgu almanın bir yolu var mı?

docs'da bir örnek bulamıyorum, ancak Django'nun ORM'sinin ...get().values(lst) gibi bir özelliği var gibi görünüyor.

Ben User.select() argüman olarak liste geçirerek çalıştı, ancak ben bir çıkan nesne ile [getattr(obj, field) for field in lst] gibi bir şey yapabileceğini tahmin

TypeError: issubclass() arg 1 must be a class 

olsun, ama daha iyi bir yolu olmalı görünüyor?

Güncelleştirmesi: Django'nun belgelerinde values bağlantısı here'dur.

cevap

1

Sorununuzun ne olduğundan emin değilsiniz, ancak flask-peewee'yi kullanarak object_list kullanmayı denediniz mi?

def user_query(): 

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

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

Çok fazla yardım etmediysem özür dilerim.

Saygılarımızla.

+0

Teşekkürler ama bu hiçbir Şişesi şablonları içindir benziyor? (Ben kullanmıyorum) – beardc

8

Sen kullanabilirsiniz:

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

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

+1

Teşekkürler, ben bu şekilde kullanıyorum (aslında, gibi bir şey User.select (* [getattr (Kullanıcı, f) lst] f) f) ama bir Django'nun 'değerler' yöntemi gibi alan adlarının dizelerinin bir listesini doğrudan iletmenin yolu. Soruyu, atıfta bulunduğum dokümanlar için bir bağlantıyla güncelleyeceğim. – beardc

+0

Btw, ORM'yi seviyorum :) – beardc

3

Sen kullanabilirsiniz:

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

User.select(*lst) 

Önceden tanımlı bir listeden dinamik SELECT alanları seçmek için bu yöntemi kullanın.

0

Bu eski bir, ancak son zamanlarda bir cevap buldum.

Tablo Kullanıcısı'ndan bir örnek verildiğinde, u._data, alan adı anahtar olarak bir sözlük döndürür. Örneğin

: Buna

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

çözeltisi tuples veya dicts kullanmaktır. dokümanlardan dicts için

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 

Örn: dokümanlardan tuplelar için

Ör

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'] 

sonuç yineleyiciler, bu yüzden unutmayın bellekte bütün tuple veya dicti isterseniz varsayılan yöntemlerle başlatmanız gerekir: tuple(stats) veya dict(stats).

More info here

İlgili konular