2016-05-23 38 views
8

sto usando peewee come ORM e hanno due classi come questo:Unione su campi con nomi diversi che utilizzano peewee

class A(Model): 
    name = CharField() 
    body = TextField() 

class B(Model): 
    title = CharField() 
    body = TextField() 

Vorrei ottenere tutte le voci da A e B cui title/name inizio con un po ' caratteri come 'abc'. Secondo la documentazione l'operatore | dovrebbe aiutare, ma non sono nemmeno in grado di eseguire il risultato Expression. Ovviamente mi piacerebbe avere un'espressione UNION e AS dietro le quinte. Come ottengo questo via peewee?

risposta

4

Si dovrebbe essere in grado di ottenere il risultato desiderato con qualcosa come

result = (
    A().select(A.name.alias('name_title'), A.body).where(A.name == 'abc') | 
    B().select(B.title.alias('name_title'), B.body).where(B.title == 'abc') 
).select().execute() 

o

search_text = 'abc' 
table_a_results = A().select(
    A.name.alias('name_title'), 
    A.body 
).where(A.name == search_text) 
table_b_results = B().select(
    B.name.alias('name_title'), 
    B.body 
).where(B.title == search_text) 

result = (table_a_results | table_b_results).select().execute() 

Il metodo .alias() a voi ottiene la funzionalità AS come da docs