如何将整个SQL Server表连同列头复制到CSV文件中?

1 投票
1 回答
2414 浏览
提问于 2025-04-17 21:18

总结

我有一个用Python(2.7)写的程序,它通过SQLAlchemy连接到SQL Server数据库。我想把整个SQL表格复制到本地的CSV文件里(包括列标题)。我对SQLAlchemy(版本0.7)还不太熟悉,目前我能把整个CSV文件导出来,但必须手动写出我的列标题。

问题

我该如何把整个SQL表格复制到本地的CSV文件里(包括列标题)?我不想手动输入列标题。这样做的原因是,如果表格的列发生变化,我不想再修改代码。

代码

import sqlalchemy

# Setup connection info, assume database connection info is correct
SQLALCHEMY_CONNECTION = (DB_DRIVER_SQLALCHEMY + '://'
    + DB_UID + ":" + DB_PWD + "@" + DB_SERVER + "/" + DB_DATABASE 
    )
engine = sqlalchemy.create_engine(SQLALCHEMY_CONNECTION, echo=True)
metadata = sqlalchemy.MetaData(bind=engine)
vw_AllCenterChatOverview = sqlalchemy.Table( \
    'vw_AllCenterChatOverview', metadata, autoload=True)
metadata.create_all(engine)
conn = engine.connect()

# Run the SQL Select Statement
result = conn.execute("""SELECT * FROM 
        [LifelineChatDB].[dbo].[vw_AllCenterChatOverview]""")

# Open file 'output.csv' and write SQL query contents to it
f = csv.writer(open('output.csv', 'wb'))
f.writerow(['StartTime', 'EndTime', 'Type', 'ChatName', 'Queue', 'Account',\
    'Operator', 'Accepted', 'WaitTimeSeconds', 'PreChatSurveySkipped',\
    'TotalTimeInQ', 'CrisisCenterKey']) # Where I explicitly list table headers
for row in result:
    try:
         f.writerow(row)
    except UnicodeError:
         print "Error running this line ", row
result.close()

表结构

在我的例子中,'vw_AllCenterChatOverview'就是那个表。以下是表的标题:

StartTime, EndTime, Type, ChatName, Queue, Account, Operator, Accepted, WaitTimeSeconds, PreChatSurveySkipped, TotalTimeInQ, CrisisCenterKey

提前谢谢你!

1 个回答

3

使用 ResultProxy.keys

# Run the SQL Select Statement
result = conn.execute("""SELECT * FROM 
        [LifelineChatDB].[dbo].[vw_AllCenterChatOverview]""")

# Get column names
column_names = result.keys()

撰写回答