为什么在必要之前选择?

时间:2017-01-20 22:12:12

标签: sqlite python-3.x select where peewee

在文档中,peewee suggests运行如下所示的选择查询:

User.select().where(User.active == True)

为什么不只是User.where(User.active == True)?这个设计决定的逻辑是什么?

1 个答案:

答案 0 :(得分:1)

首先,select()假设您正在进行SQL SELECT。 Model对象上还有其他可用的方法,如:

User.update()
User.delete()

映射到相应的SQL

UPDATE
DELETE

另外,如果你的问题是使用空的select(),它并不总是这样使用。 事实上,当你这样做时:

User.select().where(User.active == True)

你实际上在做:

User.select(User).where(User.active == True)

只是因为你从一张桌子中选择,所以peewee已经假设你可能想要从用户中选择字段并允许你省略它。

在更复杂的查询上,比如假设你有一个表UserType,其中包含可能的用户类型列表,它看起来像:

User.select(User, UserType).join(UserType).where(User.active == True)

传递给select()的参数与放在SQL SELECT前面的参数相同。它们是您希望查询返回的字段。

User.select(User.name).where(User.active == True)

应该映射到

SELECT name FROM user WHERE active == true