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

Und jetzt, wie kann ich Spalten Art von Abfrageergebnis resSQLAlchemy immer Spaltendatentypen von Abfrageergebnissen

Einer von Entscheidungen erhalten:

res._key_cache[ col_name ][0] 

Kennen Sie etwas anderes?

Antwort

8

Sie würde sagen:

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

die Anweisung (kompiliert) auf das Ergebnis ist auch, wenn Sie wie Grab- fühlen:

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

, wenn Sie die DBAPI Version der Typen wollen, die ein wenig abwechslungsreicher wird auf DBAPI basiert:

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

vielleicht werden wir in das Hinzufügen dieser Art von Metadaten aussehen DIREC tly zum ResultProxy.

+0

Stimmt es, dass Sie eine anbieterspezifische Suche durchführen müssen, um die tatsächlichen Datentypen zu erhalten? z.B. in Postgres, 'TYPES [res.context.cursor.description.type_code]', wobei 'TYPES' eine Zuordnung von [Postgres type OIDs] ist (http://initd.org/psycopg/docs/advanced.html#type- casting-from-sql-zu-python)? – z0r

+0

@ z0r in psycopg2 können diese Werte die Objekte selbst sein. psycopg2's Objekte, die ich als Integer oder ähnliches interpretiere, probiere es aus. – zzzeek

Verwandte Themen