2014-03-07 41 views
1

摘要如何將整個SQL Server表複製到包含列標題的CSV中?

我有一個Python程序(2.7)連接到使用SQLAlchemy的SQL Server數據庫。我想將整個SQL表複製到本地的CSV文件(包括列標題)。我是SQLAlchemy(版本.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 

在此先感謝!

+0

你絕對可以在數據庫中查詢列名的列表,然後將結果寫如CSV您的標題行。看看像這樣的東西(http://stackoverflow.com/questions/6455560/how-to-get-column-names-from-sqlalchemy-result-declarative-syntax) – Samvel

回答

2

使用ResultProxy.keys

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

# Get column names 
column_names = result.keys() 
+0

非常感謝!我用f.writerow(result.keys())替換了包含標題名稱的顯式f.writerow,並自動寫入列標題。謝謝。 – Will

相關問題