2012-07-12 90 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