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)
我需要怎么做才能以表格形式显示结果以及列名称
第 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)
尝试 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>),每列一个,如所描述这里。注description会None,如果执行语句的结果是空的。
如果要创建列名的列表,则可以像这样使用列表理解:column_names = [i[0] for i in cursor.description]然后根据需要对其进行处理。
或者,您可以将row_factory连接对象的参数设置为可提供列名称和结果的参数。此处提供了一个基于字典的SQLite行工厂示例,您可以在sqlite3.Row下面看到有关类型的讨论。
小智 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)