2012-07-12 28 views
16

Estoy tratando de recuperar datos de un servidor SQL usando pyodbc e imprimirlo en una tabla usando Python. Sin embargo, solo puedo recuperar el nombre de columna y el tipo de datos y cosas así, no los valores de datos reales en cada fila de la columna.Recuperando Datos de SQL Usando pyodbc

Básicamente, estoy tratando de replicar una hoja de Excel que recupera los datos del servidor y los muestra en una tabla. No tengo problemas para conectarme al servidor, solo que parece que no puedo encontrar los datos reales que entran en la tabla.

Aquí es un ejemplo de mi código:

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 

Sin embargo, el resultado de esto sólo me da cosas como el nombre de la tabla, los nombres de las columnas, y algunos números enteros y 'Ninguno de y cosas por el estilo que aren' t de interés para mí:

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 

Así que no estoy muy seguro de dónde puedo obtener los valores para llenar mi mesa. ¿Debería estar en la tabla = 'WORK_ORDER', pero podría estar bajo un nombre de tabla diferente? ¿Hay alguna manera de imprimir los datos que me acabo de perder?

Cualquier consejo o sugerencia sería muy apreciada.

+0

¿Por qué no acaba de ejecutar 'cursor.execute ('select * from WORK_TABLE')'? –

Respuesta

29

¡Estás tan cerca!

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

cursor.execute("SELECT WORK_ORDER.TYPE,WORK_ORDER.STATUS, WORK_ORDER.BASE_ID, WORK_ORDER.LOT_ID FROM WORK_ORDER") 
for row in cursor.fetchall(): 
    print row 

(la función "columns()" recoge los metadatos sobre las columnas en la tabla indicada, a diferencia de los datos reales).

+0

¡Oh, gracias! ¡Eso hizo el truco! ¡Gracias por toda su pronta ayuda! – Mike

5

Para recibir los datos reales almacenados en la tabla, debe usar una de las funciones fetch ...() o usar el cursor como un iterador (es decir, "para la fila en el cursor" ...). Esto se describe en el 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 
Cuestiones relacionadas