14

对于一个模型

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

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

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

我在文档中找不到示例,但似乎 Django 的 ORM 具有类似...get().values(lst).

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

TypeError: issubclass() arg 1 must be a class

我想我可以对结果对象做类似[getattr(obj, field) for field in lst]的事情,但似乎应该有更好的方法?

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

4

6 回答 6

19

您可以使用:

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

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

于 2013-07-08T20:31:04.113 回答
4

您可以使用:

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

User.select(*lst)

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

于 2014-03-27T13:01:28.620 回答
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')

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

问候。

于 2013-07-04T06:53:59.153 回答
1

解决方案是使用tuplesor dicts

例如,对于文档中的元组:

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

例如,对于文档中的 dicts:

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

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

更多信息在这里

于 2017-08-14T09:50:14.713 回答
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
于 2016-08-24T15:18:08.033 回答
0

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

User._meta.fields.keys()

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

于 2021-02-03T16:47:06.067 回答