Extraire des données de SQL en utilisant pyodbc

j'essaie de récupérer des données d'un serveur SQL en utilisant pyodbc et de les imprimer dans une table en utilisant Python. Cependant, je ne peux chercher que le nom de la colonne et le type de données et des trucs comme ça, pas les valeurs de données réelles dans chaque ligne de la colonne.

fondamentalement, j'essaie de répliquer une feuille Excel qui récupère les données du serveur et les affiche dans une table. Je n'ai aucun problème à me connecter au serveur, juste que je ne semble pas trouver les données réelles qui vont dans le table.

Voici un exemple de mon code:

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

cependant le résultat de ceci me donne juste des choses comme le nom de table, les noms de colonne, et quelques entiers et ' None et des choses comme ça qui ne sont pas d'intérêt pour moi:

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

Donc je ne suis pas vraiment sûr où je peux obtenir les valeurs pour remplir mon tableau. Devrait-il être dans table= "WORK_ORDER", mais pourrait-il être sous un autre nom de table? Est-il un moyen de l'impression de données que je suis juste manquant?

tout conseil ou suggestion serait grandement apprécié.

23
demandé sur Martijn Pieters 2012-07-12 15:44:22

3 réponses

Vous êtes si proche!

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 fonction" columns () " recueille des méta-données sur les colonnes dans la table nommée, par opposition aux données réelles).

38
répondu Chris Curvey 2012-07-12 12:28:23

afin de recevoir des données réelles stockées dans la table, vous devriez utiliser un de fetch...() les fonctions ou utilisez le curseur comme un itérateur (c'est à dire "pour la ligne du curseur"...). Ceci est décrit dans la 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
7
répondu anonymous_user 2012-07-12 12:00:34

au lieu d'utiliser la bibliothèque pyodbc, utilisez la bibliothèque pypyodbc... Cela a fonctionné pour moi.

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,))
1
répondu beebus 2018-07-06 23:18:35