2010-08-26 1 views
14

ich so etwas wie dies tun wollen:Wählen Sie wie in sqlalchemy

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

Die Spalten der Tabelle können wie folgt mit sqlalchemy gewählt werden:

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

Wie mache ich die select x als col_x zur Abfrage in Sqlalchemy?

+0

Ich bin nicht sicher, dass Sie Aliasnamen von Spaltennamen ohne Eingabe von Raw SQL ausführen können. Warum willst du das machen? –

+0

Ich möchte die Vereinigung dieser Abfrage mit einer anderen Abfrage durchführen, die eine Spalte mit dem Namen 'neue_Spalte' enthält. – user401574

+0

Diese Frage erscheint als ein Top-Ergebnis für ["Spalte in SQLAlchemy umbenennen" auf Google] (https://www.google .com/search? q = umbenennen + spalte + in + query + sqlalchemy) aber stellt diese Frage nicht wirklich. Die Frage scheint eher beim Erstellen einer Literalspalte als beim Umbenennen einer vorhandenen Spalte zu liegen. Die oben gewählte Antwort, beantwortet die Google-Abfrage, aber nicht die beste Schätzung der Autoren Frage. All das kombiniert mit keinem der Links zu Docs funktioniert mehr und veränderte APIs Ich denke, das ist besser archiviert/geschlossen, um weitere Verwirrung zu vermeiden. –

Antwort

0
+0

['alias()'] (http://docs.sqlalchemy.org/en/latest/core/selectable.html?highlight=alias#sqlalchemy.sql.expression.alias) soweit ich das beurteilen kann, ist für Aliasing 'FROM'-Klauseln wie Tabellen, Unterabfragen usw. (zB:' FROM foo as bar'). Für SELECT-Klauseln wie Spalten, Aggregaten usw. mit [.label ('neuer_name')] (http://docs.sqlalchemy.org/en/latest/core/metadata.html?highlight=label#sqlalchemy.schema.Column. label) wie oben erwähnt ist die Antwort –

3

Vielleicht literal_column?

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

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

Edit: eigentlich sollte ich gesagt habe "wörtlichen":

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

literal_column() ist hier geeigneter, es sei denn, der Benutzer möchte, dass ein Bindeparameter generiert wird. Also ist deine erste Antwort richtig. – zzzeek

26

Verwendung dieses: users_table.c.userid.label('NewColumn')

heißt

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

ergibt: