Получение данных из SQL с помощью pyodbc

Я пытаюсь получить данные с SQL-сервера с помощью pyodbc и распечатать его в таблице с помощью Python. Тем не менее, я могу только получить имя столбца, тип данных и т. Д., А не фактические значения данных в каждой строке столбца.

В основном я пытаюсь реплицировать лист 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

Однако результат этого просто дает мне такие вещи, как имя таблицы, имена столбцов и некоторые целые числа и «Нет» и такие вещи, которые мне не интересны:

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', но может ли оно находиться под другим именем таблицы? Есть ли способ распечатать данные, которые я просто пропустил?

Любые советы или предложения были бы весьма признательны.

python,sql,sql-server,pyodbc,

23

Ответов: 3


38 принят

Вы так близко!

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

(функция «columns ()» собирает метаданные о столбцах в названной таблице, а не фактические данные).


Чтобы получать фактические данные, хранящиеся в таблице, вы должны использовать одну из функций fetch ... () или использовать курсор в качестве итератора (т. Е. «Для строки в курсоре» ...). Это описано в документации :

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

1

Вместо использования библиотеки pyodbc используйте библиотеку pypyodbc ... Это сработало для меня.

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,))
Python, SQL, SQL-сервер, pyodbc,
Похожие вопросы