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) 

i teraz, w jaki sposób mogę uzyskać kolumny typ wyniku zapytania ressqlalchemy typy danych kolumn uzyskanie wyników zapytania

One decyzji:

res._key_cache[ col_name ][0] 

Czy wiesz coś innego?

Odpowiedz

8

chcesz powiedzieć:

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

The (skompilowany) oświadczenie jest wynikiem zbyt jeśli masz ochotę kopania:

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

jeśli chcesz wersję DBAPI typów, które jest trochę bardziej zróżnicowany w oparciu o DBAPI:

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

może zajmiemy się dodaniem tego rodzaju metadanych bardziej bezpośrednio do ResultProxy.

+0

Czy to prawda, że ​​trzeba wykonać wyszukiwanie specyficzne dla dostawcy, aby uzyskać rzeczywiste typy danych? na przykład w Postgres: 'TYPES [res.context.cursor.description.type_code]', gdzie 'TYPES' to mapowanie [Oidów typu Postgres] (http://initd.org/psycopg/docs/advanced.html#type- casting-from-sql-to-python)? – z0r

+0

@ z0r w psycopg2, wartościami tymi mogą być same obiekty. obiekty psycopg2 Myślę, że oceniam jako liczby całkowite lub coś w tym stylu, spróbuj. – zzzeek

Powiązane problemy