2010-08-26 11 views
14

voglio fare qualcosa di simile:Selezionare come in sqlalchemy

select username, userid, 'user' as new_column from users_table. 

Le colonne della tabella possono essere selezionati tramite sqlalchemy come segue:

query = select([users_table.c.username, users_table.c.userid]) 

Come posso fare la select x come col_x alla query in sqlalchemy?

+0

Non sono sicuro che si possano fare alias dei nomi di colonna senza entrare in SQL raw. Perché vorresti farlo? –

+0

Voglio fare l'unione di questa query con un'altra query che ha una colonna con nome 'new_column' – user401574

+0

Questa domanda si presenta come un risultato top per ["Rinomina colonna in query SQLAlchemy" su Google] (https://www.google .com/search? q = rename + column + in + query + sqlalchemy) ma in realtà non fa questa domanda. La domanda sembra avere più a che fare con la creazione di una colonna letterale rispetto a rinominare una colonna esistente. La risposta più votata, risponde alla query di Google ma non la migliore ipotesi della domanda degli autori. Tutto ciò combinato con nessuno dei link ai documenti che funzionano più e le API modificate penso che questo sia archiviato/chiuso meglio per evitare ulteriori confusioni. –

risposta

0
+0

['alias()'] (http://docs.sqlalchemy.org/en/latest/core/selectable.html?highlight=alias#sqlalchemy.sql.expression.alias) per quanto posso dire è per l'aliasing Clausole 'FROM' come tabelle, sottoquery, ecc. (Es .:' FROM foo as bar'). Per le clausole SELECT come colonne, aggregati, ecc. Utilizzando [.label ('new_name')] (http://docs.sqlalchemy.org/en/latest/core/metadata.html?highlight=label#sqlalchemy.schema.Column. etichetta) come accennato in precedenza è la risposta –

3

Forse literal_column?

query = select([users_table.c.username, users_table.c.userid, literal_column("user", type_=Unicode).label('new_column')]) 

Vedi http://www.sqlalchemy.org/docs/reference/sqlalchemy/expressions.html#sqlalchemy.sql.expression.literal_column

Edit: in realtà avrei dovuto dire "letterale":

query = select([users_table.c.username, users_table.c.userid, literal("user", type_=Unicode).label('new_column')]) 
+3

letteral_column() è più appropriato qui a meno che l'utente non desideri generare un parametro di binding. quindi la tua prima risposta è corretta. – zzzeek

26

uso questo: users_table.c.userid.label('NewColumn')

cioè

query = select([users_table.c.username, users_table.c.userid.label('NewColumn')]) 

valuta a:

SELECT username , userid as NewColumn From MyTable; 
Problemi correlati