2010-08-26 30 views
14

que quiero hacer algo como esto:Seleccionar como en sqlalchemy

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

Las columnas de la tabla se pueden seleccionar usando sqlalchemy de la siguiente manera:

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

¿Cómo hago el selecto x como col_x a la consulta en sqlalchemy?

+0

No estoy seguro de que pueda hacer alias de nombres de columna sin ingresar en SQL sin formato. Por qué querrías hacer esto? –

+0

Quiero hacer la unión de esta consulta con otra consulta que tiene una columna con el nombre 'new_column' – user401574

+0

Esta pregunta aparece como un resultado superior para ["Renombrar columna en consulta SQLAlchemy" en Google] (https://www.google .com/search? q = rename + column + in + query + sqlalchemy) pero en realidad no hace esa pregunta. La pregunta parece tener más que ver con la creación de una columna literal que el cambio de nombre de una columna existente. La respuesta más votado, responde a la consulta de Google pero no es la mejor estimación de la pregunta de los autores. Todo eso combinado con ninguno de los enlaces a docs funcionando más y las API modificadas Creo que esto es mejor archivado/cerrado para evitar cualquier confusión adicional. –

Respuesta

0
+0

['alias()'] (http://docs.sqlalchemy.org/en/latest/core/selectable.html?highlight=alias#sqlalchemy.sql.expression.alias) por lo que puedo decir es para aliasing 'FROM' cláusulas como tablas, subconsultas, etc. (por ej .:' FROM foo as bar'). Para las cláusulas SELECT como columnas, agregados, etc. usando [.label ('new_name')] (http://docs.sqlalchemy.org/en/latest/core/metadata.html?highlight=label#sqlalchemy.schema.Column. label) como se mencionó anteriormente es la respuesta –

3

Tal literal_column?

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

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

Editar: en realidad debería haber dicho "literal":

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

literal_column() es más apropiado aquí a menos que el usuario desee que se genere un parámetro de vinculación. entonces tu primera respuesta es correcta. – zzzeek

26

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

es decir,

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

evalúa a:

SELECT username , userid as NewColumn From MyTable;