2010-02-13 15 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) 

E ora, come posso ottenere colonne tipo di risultato della query resSQLAlchemy tipi di dati ricevendo colonna di risultati di query

Una delle decisioni:

res._key_cache[ col_name ][0] 

Sai qualcosa di diverso?

risposta

8

che avresti detto:

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

la (compilato) affermazione è il risultato anche se avete voglia di scavo:

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

se si desidera la versione DBAPI dei tipi, che è un po 'più vario in base a DBAPI:

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

forse noi esamineremo l'aggiunta di questo tipo di metadati più diret allo ResultProxy.

+0

È vero che è necessario eseguire una ricerca specifica del fornitore per ottenere i tipi di dati effettivi? per esempio. in Postgres, 'TYPES [res.context.cursor.description.type_code]', dove 'TYPES' è una mappatura di [OID di tipo Postgres] (http://initd.org/psycopg/docs/advanced.html#type- Casting-da-sql-to-python)? – z0r

+0

@ z0r in psycopg2, quei valori potrebbero essere gli oggetti stessi. Gli oggetti di psycopg2 penso valgano come interi o qualcosa del genere, provalo. – zzzeek

Problemi correlati