如何使用peewee查询获取列/字段?

时间:2013-06-04 21:19:12

标签: python orm peewee

对于模型

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

以及字段列表lst = ['phone', 'name', 'points']

有没有办法让您的查询返回lst中的字段?

我在docs中找不到一个例子,但似乎Django的ORM有...get().values(lst)之类的东西。

我尝试将列表作为参数传递给User.select(),但得到

TypeError: issubclass() arg 1 must be a class

我想我可以用[getattr(obj, field) for field in lst]做一个带有结果对象的东西,但似乎应该有更好的方法吗?

更新:Django文档中values的链接为here

6 个答案:

答案 0 :(得分:15)

您可以使用:

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

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

答案 1 :(得分:2)

您可以使用:

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

User.select(*lst)

我使用此方法从预定义列表中动态选择字段SELECT

答案 2 :(得分:1)

不确定您的问题是什么,但您是否尝试使用object_list,使用flask-peewee?

def user_query():

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

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

如果没有多少帮助,我很抱歉。

问候。

答案 3 :(得分:1)

这是一个旧的,但我最近找到了答案。

给定表User的实例u,然后u._data返回字段名为键的字典。

例如:

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

答案 4 :(得分:0)

解决方法是使用tuplesdicts

来自文档的元组:

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

例如来自文档的词汇:

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

请记住,结果是迭代器,因此如果您想要内存中的整个元组或字典,则必须使用默认方法对其进行初始化: tuple(stats)dict(stats)

More info here

答案 5 :(得分:0)

这种数据隐藏在Model的元数据中,你可以这样访问:

User._meta.fields.keys()

如果你想要一个列表只是解析它,这将返回一个 dict_keys 对象 -> list()