2017-11-12 2 views
0

Hallo Stackoverflow Community,Beitreten Fragen in Peewee

Ich habe gerade angefangen zu arbeiten auf peewee Anwendung und wenig stecken mit Join-Abfragen. Derzeit habe ich folgende Modelle Setup:

class Equipment(BaseModel): 
    equip_id = CharField(primary_key=True) 
    is_fullset = BooleanField(default=False) 


class Department(BaseModel): 
    dept_id = IntegerField(primary_key=True) 
    dept_name = CharField() 


class User(BaseModel): 
    email = CharField(primary_key=True) 
    equip_id_fk = ForeignKeyField(Equipment, related_name="equipments", null=True) 
    dept_id_fk = ForeignKeyField(Department, related_name="departments") 
    user_name = CharField() 

Ich möchte eine Ansicht/Tabelle anzuzeigen, die Informationen aller Tabelle kombiniert halten wird. Ich habe versucht, dies für Benutzer und Ausrüstung (für jetzt) ​​so zu tun:

query = (Equipment.select(Equipment, User).join(User, JOIN.LEFT_OUTER)) 

Hier bekomme ich Gerätewerte zuerst und dann Benutzer. Ich habe versucht, Benutzer mit Ausrüstung zu wechseln und umgekehrt, aber es hat nicht gut geklappt. Grundsätzlich möchte ich alle diese drei Form in einer einzigen Tabelle anzuzeigen, in dieser Reihenfolge:

User Name || User Email || Dept_ID || Dept_NAME || EQUIP_ID || Is_Fullset 

Bitte lassen Sie mich wissen, wenn ich brauche, um meine Modelle oder Abfrage zu ändern. Jede Hilfe würde wirklich geschätzt werden.

Antwort

1
query = (User 
     .select(User, Equipment, Department) 
     .join(Equipment, JOIN.INNER) 
     .switch(User) 
     .join(Department, JOIN.INNER)) 
for row in query: 
    print(row.user_name, row.email, row.dept_id_fk.dept_id, 
      row.dept_id_fk.dept_name, row.equip_id_fk.equip_id, 
      row.equip_id_fk.is_fullset) 
+0

Vielen Dank @coliefer, das hat funktioniert. Ich hatte eine Frage dazu. Einige meiner Benutzerinstanz hat null Fremdschlüssel und ich denke nicht, dass obige vorgeschlagene Abfrage für sie arbeiten würde. Für das Beispiel, wie ich neue Benutzerinstanz erstellen werde Null-Fremdschlüssel: 'user = User.create ( email = request.form [ 'email_id'], user_name = request.form [ 'user_name'], dept_id_fk = request.form [ 'dropdown_depts'], equip_id_fk = Keine ) ' –

+0

Zweitens, wenn ich versuche, Bearbeiten Sie eine der Benutzerinstanzen mit der Geräte-ID. Es wird zwar eine neue Geräte-ID in der Liste angezeigt, jedoch wird mit der vorgeschlagenen Abfrage is_fullset (boolean) nicht aktualisiert. 'equip_id = request.form [ 'radioID'] Equipment.create ( equip_id = equip_id, is_fullset = request.form [ "radioType"] ) user = User.select(). Wo (User.email == email_id) .get() user.equip_id_fk = equip_id user.save() ' Irgendwelche Hilfe dazu würde wirklich geschätzt :) –