Возможно ли для 64-битного Python подключиться к 32-битному драйверу доступа MS?

Как я могу использовать 32-битный драйвер доступа MS для соединения odbc в 64-битном python? Можно ли это сделать, изменив дескриптор среды или константы odbc в pypyodbc или создав файл преобразования битов?
Еще одна мысль (не уверена, что возможно): есть ли способ переключиться на 32-битный python.exe во время выполнения кода. (ПРОСТО, когда пользователь хочет получить доступ к базе данных)? По сути что-то вроде...

if access api called and struct.calcsize("P") == 8: open python 32bit interpreter and connect to 32bit driver

Открыт для всех решений... Спасибо


person asdf    schedule 06.06.2015    source источник


Ответы (1)


Статьи, форумы и SO Posts изобилуют этой темой. .

Короче говоря, вы не можете подключить (на уровне приложения) 64-битный Python.exe к 32-битному драйверу ODBC MS Access (odbcad32.exe), поскольку просто данные хранятся и обрабатываются по-разному между типами. Однако с обратной совместимостью рекомендуется работать в наименьшем общем знаменателе, поскольку 64-битная ОС может запускать 32-битные приложения, а программы одного уровня могут «разговаривать» друг с другом.

Что касается динамической настройки для переключения режимов, это может быть очень обширным обходным путем, поскольку 32-разрядный python.exe и 64-разрядный python.exe — это, по сути, разные установленные приложения с пакетами, такими как pypyodbc, соответствующими друг другу. Таким образом, перед установкой обеих версий вам потребуется сценарий:

  1. одна версия Python, которая выходит из себя и вызывает другую версию, используя вычисление платформы или переменной длины, как вы упомянули: struct.calcsize("p");
  2. в командной строке (например, сценарий оболочки, пакетный файл);
  3. через внешнюю программу (например, Excel/Access VBA, Java, C#, php.exe);

Внешние приложения должны будут выбрать, какая версия будет запускать скрипт Python на основе установленного драйвера ODBC, глядя на раздел реестра как на индикатор или размер переменного типа. Это также может потребовать создания переменных пути к обеим версиям python.exe и быть уверенным, что они не конфликтуют друг с другом, выбрав одну из них как по умолчанию.

Многие предпочитают развертывать две версии приложения в зависимости от среды процессора пользователя.

person Parfait    schedule 07.06.2015
comment
Спасибо, мы можем обсудить, как использовать подход 1? Я протестировал соединение odbc через 32-битный Python, и оно работает. Теперь план элегантно переключается между ними во время выполнения. - person asdf; 08.06.2015
comment
Создан новый вопрос относительно 1. stackoverflow.com/questions/30716663/ - person asdf; 08.06.2015