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

bea*_*rdc 12 python orm peewee

对于模型

class User(db.Model, BaseUser):
    name = CharField()
    phone = CharField()
    age = IntegerField()
    points = IntegerField()
Run Code Online (Sandbox Code Playgroud)

和一个字段列表, lst = ['phone', 'name', 'points']

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

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

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

TypeError: issubclass() arg 1 must be a class
Run Code Online (Sandbox Code Playgroud)

我想我可以做一些像[getattr(obj, field) for field in lst]生成的对象,但似乎应该有更好的方法?

更新:valuesDjango文档中的链接在这里.

col*_*fer 16

您可以使用:

User.select(User.phone, User.name, User.points)
Run Code Online (Sandbox Code Playgroud)

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

  • 谢谢,我一直在使用这种方式(实际上,像'User.select(*[getattr(用户,f)for f in lst])`)但是想知道是否有办法直接传递一个字符串列表字段名称,如Django的`values`方法.我将通过指向我所指的文档的链接更新问题. (3认同)

小智 5

您可以使用:

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

User.select(*lst)
Run Code Online (Sandbox Code Playgroud)

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


hep*_*dad 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')
Run Code Online (Sandbox Code Playgroud)

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

问候。