如何在python中用SQL编写具有列名的表输出?

如何在python中用SQL编写具有列名的表输出?,python,pandas,Python,Pandas,我使用pandas库来编写从sql表检索的数据。它正在工作,但我在那里没有看到列名。此外,每一行都附加在Excel中,就像 ('aa','aa','01/10/2019','zzz') ('bb','cc','03/10/2019','yy') .. 我希望我的Excel工作表有列名,没有冒号。(')是一个合适的Excel工作表 例如: 我的代码如下 cursor.execute(sql, values) records = cursor.fetchall() data = [] for r

我使用pandas库来编写从sql表检索的数据。它正在工作,但我在那里没有看到列名。此外,每一行都附加在Excel中,就像

('aa','aa','01/10/2019','zzz')
('bb','cc','03/10/2019','yy')
..
我希望我的Excel工作表有列名,没有冒号。(')是一个合适的Excel工作表

例如:

我的代码如下

cursor.execute(sql, values)
records = cursor.fetchall()

data = []
for row in records:
    data.append(row)

df = pd.DataFrame(data)

cursor.close()
cnxn.close()
writer = pd.ExcelWriter('output.xlsx')
df.to_excel(writer, index=False, sheet_name='Invoice') 
writer.save()
如何使用列名称进行检索并使用pandas将其写入excel


我使用pyodbc连接到SQL Server数据库。

我建议使用pandas的内置函数从SQL数据库读取数据。 这应该能正确地读入你的标题和数据类型

您需要定义一个sqlAlchemy连接来传递给pd.read_sql,但这对于mssql来说很简单:

from sqlalchemy import create_engine
engine = create_engine('mssql://timmy:tiger@localhost:5432/mydatabase')
connection = engine.connect()
query = "SELECT * FROM mytable"

df = pd.read_sql(query, engine)

编辑: 根据Ratha的评论,应该注意的是,sqlAlchemy连接对于read_sql的工作并不是必不可少的,事实上,从文档中,连接被定义为:

con:SQLAlchemy可连接(引擎/连接)或数据库字符串URI 或DBAPI2连接(回退模式)

使用SQLAlchemy可以使用该库支持的任何数据库。如果是DBAPI2对象,则仅支持sqlite3


没有必要使用sqlalchemy连接字符串。我使用了pyodbc,工作很好。谢谢你知道我如何用read_sql实现这一点吗?
from sqlalchemy import create_engine
engine = create_engine('mssql://timmy:tiger@localhost:5432/mydatabase')
connection = engine.connect()
query = "SELECT * FROM mytable"

df = pd.read_sql(query, engine)