如何在python中获取SQL查询的表列名/标题

bsh*_*hah 1 python sql cursor pandas ipython-notebook

我将数据存储在使用Python存储在SQLITE数据库中的pandas数据框中。当我尝试查询其中的表时,我可以获得结果,但没有列名。有人可以指导我吗?

sql_query = """Select date(report_date), insertion_order_id, sum(impressions), sum(clicks), (sum(clicks)+0.0)/sum(impressions)*100 as CTR
            from RawDailySummaries
            Group By report_date, insertion_order_id
            Having report_date like '2014-08-12%' """

cursor.execute(sql_query)
query1 = cursor.fetchall()

for i in query1:
    print i
Run Code Online (Sandbox Code Playgroud)

以下是我得到的输出

(u'2014-08-12', 10187, 2024, 8, 0.3952569169960474)
(u'2014-08-12', 12419, 15054, 176, 1.1691244851866613)
Run Code Online (Sandbox Code Playgroud)

我需要怎么做才能以表格形式显示结果以及列名称

Har*_*_pb 8

第 1 步:选择您的引擎,例如 pyodbc、SQLAlchemy 等。

第 2 步:建立连接 cursor = connection.cursor()

第三步:执行SQL语句 cursor.execute("Select * from db.table where condition=1")

步骤 4:从连接变量描述中提取标头

headers = [i[0] for i in cursor.description]
print(headers)
Run Code Online (Sandbox Code Playgroud)


Eze*_*r K 5

尝试 Pandas .read_sql(),我现在无法检查它,但它应该是这样的:

 pd.read_sql( Q , connection)
Run Code Online (Sandbox Code Playgroud)


小智 5

在DB-API 2.0兼容的客户端,cursor.description是形式的7项序列的序列(<name>, <type_code>, <display_size>, <internal_size>, <precision>, <scale>, <null_ok>),每列一个,如所描述这里。注descriptionNone,如果执行语句的结果是空的。

如果要创建列名的列表,则可以像这样使用列表理解:column_names = [i[0] for i in cursor.description]然后根据需要对其进行处理。

或者,您可以将row_factory连接对象的参数设置为可提供列名称和结果的参数。此处提供了一个基于字典的SQLite行工厂示例,您可以在sqlite3.Row下面看到有关类型的讨论。

  • 杰出的!只是一个例子,以防有人试图将 sql 查询加载到 pandas 数据框中,并尊重查询中的列名: ```cur.execute(q) import pandas as pd pd.DataFrame.from_records(cur, columns=[i[0 ] for i in cur.description]) ``` (2认同)

小智 5

这是使用 的示例代码cx_Oracle,它应该执行预期的操作:

import cx_Oracle


def test_oracle():
    connection = cx_Oracle.connect('user', 'password', 'tns')
    try:
        cursor = connection.cursor()
        cursor.execute('SELECT day_no,area_code ,start_date from dic.b_td_m_area where rownum<10')

        #only print head
        title = [i[0] for i in cursor.description]
        print(title)

        # column info
        for x in cursor.description:
            print(x)

    finally:
        cursor.close()


if __name__ == "__main__":
    test_oracle();
Run Code Online (Sandbox Code Playgroud)