Recuperando datos de SQL usando pyodbc

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

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

Aquí hay 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 solo me da cosas como el nombre de la tabla, los nombres de las columnas y algunos enteros y ‘Ninguno’ y cosas por el estilo que no me interesan:

 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 realmente seguro de dónde puedo obtener los valores para llenar mi tabla. ¿Debería estar en la tabla = ‘WORK_ORDER’, pero podría estar bajo un nombre de tabla diferente? ¿Hay alguna forma de imprimir los datos que me faltan?

Cualquier consejo o sugerencia será bien recibido.

¡Estás muy 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 “columnas ()” recostack metadatos sobre las columnas en la tabla nombrada, a diferencia de los datos reales).

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 fila en el cursor” …). Esto se describe en la documentación :

 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 

podría intentar usar Pandas para recuperar información y obtenerla como dataframe

 import pyodbc as cnn import pandas as pd cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=SQLSRV01;DATABASE=DATABASE;UID=USER;PWD=PASSWORD') # Copy to Clipboard for paste in Excel sheet def copia (argumento): df=pd.DataFrame(argumento) df.to_clipboard(index=False,header=True) tableResult = pd.read_sql("SELECT * FROM YOURTABLE", cnxn) # Copy to Clipboard copia(tableResult) # Or create a Excel file with the results df=pd.DataFrame(tableResult) df.to_excel("FileExample.xlsx",sheet_name='Results') 

¡Espero que esto ayude! ¡Aclamaciones!

En lugar de usar la biblioteca pyodbc, use la biblioteca pypyodbc … Esto funcionó para mí.

 import pypyodbc conn = pypyodbc.connect("DRIVER={SQL Server};" "SERVER=server;" "DATABASE=database;" "Trusted_Connection=yes;") cursor = conn.cursor() cursor.execute('SELECT * FROM [table]') for row in cursor: print('row = %r' % (row,)) 

La respuesta de Upvoted no funcionó para mí. Se corrigió editando la línea de conexión de la siguiente manera ( reemplace los puntos y coma con coma y también elimine esas comillas ):

 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