2017-01-20 4 views
-4

In der Dokumentation peeweesuggests eine Auswahlabfrage wie so ausgeführt wird:Warum wird vorher ausgewählt, wo nötig?

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

Warum nicht einfach User.where(User.active == True)? Was ist die Logik dieser Designentscheidung?

+0

'select' nicht die einzige Art der Abfrage ist, so müssen Sie angeben, dass es sich um eine' select' Abfrage ist. – 4castle

+0

@ 4castle Sie scheinen die Frage zu beantworten: "Warum ist wo nötig nach Auswahl", was ich nicht möchte. – Superbest

+0

Ich glaube, ich beantworte Ihre Frage "warum ist' select' vor 'wo' "nötig? – 4castle

Antwort

1

Für Starter, markieren Sie(), um zu markieren, dass Sie eine SQL SELECT ausführen. Es gibt weitere Methoden auf dem Modellobjekten wie:

User.update() 
User.delete() 

die Karte, um die entsprechenden SQL

UPDATE 
DELETE 

Auch, wenn Ihr Probleme mit select() leer verwendet wird, ist es nicht immer verwendet so wie das. In der Tat, wenn Sie das tun:

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

Sie tatsächlich tun:

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

es nur das ist, da man aus einer einzigen Tabelle sind die Auswahl nimmt peewee bereits wahrscheinlich Sie die wählenden Felder von Benutzer und ermöglicht es Ihnen, es wegzulassen.

auf komplexere Abfragen, wie sagen wir, Sie mit einer Liste von möglichen Benutzertypen eine Tabelle Usertype hatte, es etwas aussehen würde:

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

Die Parameter, die Sie wählen() übergeben sind die gleichen Sie vor SQL SELECT setzen. Sie sind die Felder, die die Abfrage zurückgeben soll.

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

sollten Karte zu

SELECT name FROM user WHERE active == true 
Verwandte Themen