Ошибка Pyodbc Имя источника данных не найдено, а драйвер по умолчанию не указан парадокс

Я пытаюсь использовать pyobdc для чтения данных из базы данных Paradox, и я продолжаю получать следующую ошибку при попытке подключения к базе данных:

pyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')

Я пытался создать новые ссылки DNS для базы данных, но это не помогло.

Мои системные ссылки:

This is what the system DNS looks like

Мой код:

import os
import sys
import time
import pyodbc

LOCATION = "c:\Users\Marcello\Desktop\DATA\ScorMonitor.db"

cnxn = pyodbc.connect(r"Driver={{Microsoft Paradox Driver (*.db )}};Fil=Paradox 5.X;DefaultDir={0};Dbq={0}; CollatingSequence=ASCII;")
cursor = cnxn.cursor()
cursor.execute("select last, first from test")
row = cursor.fetchone()
print row

Ответ 1

Две мысли о том, что проверить:

1) Строка подключения неверна. Там можно получить известную строку хорошего соединения непосредственно из программы администратора ODBC (взято из http://www.visokio.com/kb/db/dsn-less-odbc). Эти инструкции предполагают, что вы используете MDB, но тот же процесс будет работать для файла парадокса

  • На обычном клиентском ПК откройте Панель управления → Администрирование → Источники данных.
  • Выберите вкладку "Файл DSN" и нажмите "Добавить".
  • Выберите соответствующий драйвер (например, "Microsoft Access Driver (*.mdb)" ) и нажмите "Далее"
  • Нажмите "Обзор" и выберите, где вы хотите сохранить файл .dsn(это временный файл, который вы собираетесь удалить позже).
  • Нажмите "Далее", затем "Готово".
  • Вам будет показан диалог настройки ODBC для конкретного поставщика. Например, с Microsoft Access вам может потребоваться щелкнуть Select и перейти к существующему файлу .mdb, прежде чем нажимать OK.
  • Перейдите к местоположению файла .dsn и откройте "Блокнот".

В файле DSN вы можете увидеть нечто похожее на:

[ODBC]
DRIVER=Microsoft Access Driver (*.mdb)
UID=admin
UserCommitSync=Yes
Threads=3
SafeTransactions=0
PageTimeout=5
MaxScanRows=8
MaxBufferSize=2048
FIL=MS Access
DriverId=25
DefaultDir=C:\
DBQ=C:\db1.mdb

Чтобы преобразовать приведенное выше в строку полного соединения:

  • Опустить первую строку [ODBC]
  • Поместите фигурные скобки вокруг всех значений, содержащих пробелы
  • Поместите все пары name = value в одну строку, разделенные точками с запятой.

Это дает вам полную строку подключения. В этом примере строка становится:

DRIVER={Microsoft Access Driver (*.mdb)};UID=admin;UserCommitSync=Yes;Threads=3;SafeTransactions=0;PageTimeout=5;axScanRows=8;MaxBufferSize=2048;FIL={MS Access};DriverId=25;DefaultDir=C:\;DBQ=C:\db1.mdb

2) несоответствие 32/64 бит. У меня были проблемы при смешивании 32-разрядного питона с 64-битными драйверами или наоборот. Вы можете проверить свой интерпретатор Python и драйвер базы данных.

Ответ 2

Спасибо за вопрос, у меня была аналогичная проблема, и этот вопрос и ответы помогли привести меня к тому, что мне было нужно. Проблема для меня оказалась несоответствием между 64-битным Python и 32-разрядным драйвером ODBC в Windows 10 (как предложил Чад Кеннеди). Я запускаю полностью обновленную версию Fall Creator Edition и установил Microsoft Office Pro 2016. Установщик MS Office по-прежнему по умолчанию использует 32-разрядную установку (не заставляйте меня начинать...) - она ​​не спрашивает об этом во время установки, поэтому представьте мое удивление, когда я обнаружил, что у меня работает 32-разрядный Office, Из-за этого он устанавливает 32-разрядный драйвер ODBC для MS Access. Существует небольшая незаметная ссылка, которую вы можете щелкнуть в диалоговом окне установщика MS Office, чтобы принудительно установить 64-разрядную версию.

64-разрядная установка Python не будет работать с 32-разрядным драйвером ODBC Microsoft Access, и Microsoft не позволит вам установить 64-разрядный драйвер ODBC, если на компьютере установлено 32-разрядное MS Office.

Исправление было для UNINSTALL MS Office и переустановить его, используя эту крошечную ссылку в диалоговом окне установки, чтобы сообщить ей, чтобы установить ее как 64-разрядную. Не беспокойтесь, он запоминает все ваши последние файлы и настройки, а также учетные записи электронной почты в Outlook. Как только это было сделано, у меня был 64-разрядный драйвер ODBC, а мой код Python был подключен к базе данных без каких-либо дополнительных проблем.

Ответ 3

Ярлык для настройки источников данных ODBC может указывать на 32-битные источники данных вместо 64-битных.

Перейдите в панель управления → инструменты администрирования → выберите источники данных (ODBC) → затем щелкните правой кнопкой мыши этот файл → перейдите в свойства → на вкладке ярлыков → измените путь с %windir%\System32\odbcad32.exe в

%windir%\SysWOW64\odbcad32.exe

Ответ 4

Эту проблему можно решить с помощью интерпретатора Office и Python с одинаковой конфигурацией битов. Но, правда, у меня был 64-битный Office и Python, и он не работает...

Вот решение.

На самом деле есть два (2) разных драйвера ODBC для доступа от Microsoft:

  1. Драйвер Microsoft Access (*.mdb)

    Драйвер Microsoft Access (*.mdb) - это более старый 32-разрядный драйвер Jet Jet ODBC. Он входит в стандартную часть установки Windows. Работает только с файлами .mdb (не .accdb). Это также официально устарело.

  2. Драйвер Microsoft Access (*.mdb, *.accdb)

    Драйвер Microsoft Access (*.mdb, *.accdb) - это более новый драйвер ODBC "ACE". Он не входит в состав Windows, но обычно входит в состав установки Microsoft Office. Он также доступен в виде бесплатного автономного "распространяемого" установщика для машин без Microsoft Office. Существуют отдельные 64-разрядные и 32-разрядные версии ядра базы данных доступа "ACE" (и драйверы), и обычно в них установлена либо 64-разрядная, либо 32-разрядная версия. (Можно заставить обе версии существовать на одном и том же компьютере, но это не рекомендуется, поскольку это может "сломать" установки Office. Поэтому, если у вас уже есть Microsoft Office, настоятельно рекомендуется использовать среду Python, соответствующую "" "битность" из офиса установки.)

Самый простой способ проверить, доступен ли один из драйверов ODBC Microsoft Access для вашей среды Python (в Windows), - это выполнить

       импорт pyodbc

         [x для x в pyodbc.drivers(), если x.startswith("Драйвер Microsoft Access")]

   Если вы видите пустой список, значит, вы работаете с 64-битным Python и вам нужно установить 64-битную версию драйвера "ACE". Если вы видите только "Драйвер Microsoft Access (*.mdb)" и вам нужно работать с файлом .accdb, вам нужно установить 32-разрядную версию драйвера "ACE".

По этой ссылке вы можете скачать свой драйвер ССЫЛКА

Источник информации

С уважением!