2012-07-12 108 views
16

我想從使用pyodbc的SQL服務器中檢索數據並使用Python將其打印在表中。但是,我似乎只能檢索列名稱和數據類型以及類似的東西,而不是列的每一行中的實際數據值。從SQL中檢索數據使用pyodbc

基本上我試圖複製一個Excel工作表,檢索服務器數據並將其顯示在表中。我沒有任何連接到服務器的麻煩,只是我似乎無法找到進入表中的實際數據。

這裏是我的代碼示例:

import pyodbc 
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=SQLSRV01;DATABASE=DATABASE;UID=USER;PWD=PASSWORD') 
cursor = cnxn.cursor() 

cursor.execute("SELECT * FROM sys.tables") 
tables = cursor.fetchall() 
#cursor.execute("SELECT WORK_ORDER.TYPE,WORK_ORDER.STATUS, WORK_ORDER.BASE_ID, WORK_ORDER.LOT_ID FROM WORK_ORDER") 

for row in cursor.columns(table='WORK_ORDER'): 
    print row.column_name 
    for field in row: 
     print field 

然而這樣做的結果只是給了我的東西,如表名,列名,有的整數和'無的之類的東西是不是活得t我感興趣的:

STATUS_EFF_DATE 
DATABASE 
dbo 
WORK_ORDER 
STATUS_EFF_DATE 
93 
datetime 
23 
16 
3 
None 
0 
None 
None 
9 
3 
None 
80 
NO 
61 

所以我不太確定在哪裏可以得到值填滿我的表。它應該在table ='WORK_ORDER'中,但可以在不同的表名下嗎?有沒有辦法打印我剛剛丟失的數據?

任何意見或建議將不勝感激。

+0

爲什麼不直接運行'cursor.execute('select * from WORK_TABLE')'? – 2012-07-12 11:48:05

回答

29

你太親近了! (「columns()」函數收集有關指定表中列的元數據,而不是實際數據)。

+0

哦,謝謝!這只是一招! 感謝您提供的所有幫助! – Mike 2012-07-13 03:05:08

5

爲了接收存儲在表中的實際數據,您應該使用fetch ...()函數或將光標用作迭代器(即「用於光標中的行」...)。這在documentation中有描述:

cursor.execute("select user_id, user_name from users where user_id < 100") 
rows = cursor.fetchall() 
for row in rows: 
    print row.user_id, row.user_name