2010-02-13 13 views
8
from sqlalchemy import create_engine, MetaData, ForeignKey 

engine = create_engine("mysql://user:[email protected]/shema", echo=False) 
meta = MetaData(engine, True) 
conn = engine.connect() 

tb_list = meta.tables["tb_list"] 
tb_data = meta.tables["tb_data"] 

tb_list.c.i_data.append_foreign_key(ForeignKey(tb_data.c.i_id)) 

q = tb_list.outerjoin(tb_data).select() 

res = conn.execute(q) 

Y ahora, ¿cómo puedo obtener columnas tipo de resultado de la consulta resSQLAlchemy tipos de datos de columna de obtener los resultados de consultas

Una de las decisiones:

res._key_cache[ col_name ][0] 

¿Conoce a alguna otra cosa?

Respuesta

8

que diría:

types = [col.type for col in q.columns] 

la (compilado) está en el resultado también si usted se siente como la excavación:

types = [col.type for col in res.context.compiled.statement.columns] 

si quieres la versión DBAPI de los tipos, los cuales es un poco más variado a base de DBAPI:

types = [elem[1] for elem in res.cursor.description] 

tal vez vamos a ver en la adición de este tipo de metadatos más direc tly al ResultProxy.

+0

¿Es cierto que debe hacer una búsqueda específica del proveedor para obtener los tipos de datos reales? p.ej. en Postgres, 'TYPES [res.context.cursor.description.type_code]', donde 'TYPES' es una asignación de [OID de tipo Postgres] (http://initd.org/psycopg/docs/advanced.html#type- casting-from-sql-to-python)? – z0r

+0

@ z0r en psycopg2, esos valores pueden ser los objetos mismos. Los objetos de psycopg2 creo que se evalúan como enteros o algo así, pruébelo. – zzzeek

Cuestiones relacionadas