2015-04-10 2 views
3

Я пытаюсь выбрать две таблицы, которые имеют общее поле. в сыром запросе MySQL, я могу написать следующим образом:Положите пустое поле в peewee union select

SELECT t1.id, t1.username, t1.date FROM table1 as 't1' UNION SELECT t2.id, "const_txt", t2.date FROM table2 as 't2' 

В этом запросе username поле не в table2, и я установить const_txt вместо этого.

Итак, в peewee, я хочу объединить две таблицы, которые имеют такую ​​же ситуацию выше.

class PeeweeBaseModel(Model): 
    class Meta: 
     database = my_db 

class Table1(PeeweeBaseModel): 
    id = PrimaryKeyField() 
    username = CharField(255) 
    date = DateTimeField() 
    #other fields ... 

class Table2(PeeweeBaseModel): 
    id = PrimaryKeyField() 
    date = DateTimeField() 
    #other fields ... 

а затем, союз двух моделей. что-то вроде этого:

u = (
    Table1(
     Table1.id, 
     Table1.username, 
     Table1.date 
    ).select() 
    | 
    Table2(
     Table2.id, 
     "const_text_instead_real_field_value", 
     Table2.date 
    ).select() 
).select().execute() 

const_text Но не принимается полем и игнорировать в результате запроса.

вопрос: Как я могу определить поле, которое не существует в моей таблице, и установить его вручную в запросе?

(И я предпочитаю не использовать SQL функции().)

спасибо.

ответ

3

Вы можете использовать SQL() в инструкции SELECT.

u = (
    Table1(
     Table1.id, 
     Table1.username, 
     Table1.date 
    ).select() 
    | 
    Table2(
     Table2.id, 
     SQL(" '' AS username "), 
     Table2.date 
    ).select() 
).select().execute() 
+0

Это хорошо ... но, как я уже говорил, мне нужен другой способ, кроме SQL(). Но еще раз спасибо. –

+0

Это именно то, для чего предназначена функция 'SQL'. – coleifer

+0

@ Reza-S4, просто чтобы немного уточнить, какой тип API вы бы лучше видели, чем 'SQL'? – coleifer