SQLAlchemy 获取查询结果的列数据类型

Posted

技术标签:

【中文标题】SQLAlchemy 获取查询结果的列数据类型【英文标题】:SQLAlchemy getting column data types of query results 【发布时间】:2010-02-13 15:36:24 【问题描述】:
from sqlalchemy import create_engine, MetaData, ForeignKey

engine = create_engine("mysql://user:passwd@localhost/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)

现在,我怎样才能得到查询结果的列类型res

其中一个决定:

res._key_cache[ col_name ][0]

你知道别的吗?

【问题讨论】:

【参考方案1】:

你会说:

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

如果你想挖掘的话,(编译的)语句也在结果上:

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

如果您想要类型的 DBAPI 版本,基于 DBAPI 会更加多样化:

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

也许我们会考虑将这种元数据更直接地添加到ResultProxy

【讨论】:

您是否需要进行特定于供应商的查找以获取实际数据类型?例如在 Postgres 中,TYPES[res.context.cursor.description.type_code],其中TYPES 是Postgres type OIDs 的映射? @z0r 在 psycopg2 中,这些值可能是对象本身。我认为 psycopg2 的对象评估为整数或类似的东西,试试看。

以上是关于SQLAlchemy 获取查询结果的列数据类型的主要内容,如果未能解决你的问题,请参考以下文章

将计数行视为查询结果中的列

SQLAlchemy 递归查询结果集排序

Cassandra/Datastax:如何在 java 中获取具有列表数据类型的列的值

sqlalchemy使用之查询指定的列

在 SQLAlchemy 列类型和 python 数据类型之间轻松转换?

在 sqlalchemy 中根据日期搜索数据