Возможно ли подключить 64-битный Python к 32-битному драйверу MS Access?
Как я могу использовать драйвер доступа 32-битный MS для подключения odbc в Python 64bit? Можно ли это сделать, изменив дескриптор среды или константы odbc в pypyodbc, или создав файл преобразования битов?
Еще одна мысль (не уверен, если это возможно): есть ли способ переключиться на 32-битный python.exe во время выполнения кода (ТОЛЬКО для случаев, когда пользователь хочет получить доступ к базе данных)? По сути, что-то вроде...
if access api called and struct.calcsize("P") == 8:
open python 32bit interpreter and connect to 32bit driver
Открыто для всех решений... Спасибо
1 ответ
На эту тему предостаточно статей, форумов и SO.
Вкратце, вы не можете подключить (на уровне приложения) 64-разрядный Python.exe к 32-разрядному драйверу MS Access ODBC (odbcad32.exe), поскольку данные просто хранятся и обрабатываются по-разному для разных типов. Однако при обратной совместимости рекомендуется работать с наименьшим общим знаменателем, поскольку 64-разрядная ОС может запускать 32-разрядные приложения, а программы одного уровня могут "общаться" друг с другом.
Что касается динамических настроек переключения режимов, то это может быть очень обширный обходной путь, так как 32-битные python.exe и 64-битные python.exe - это, по сути, разные установленные приложения, пакеты которых, например, pypyodbc, соответствуют друг другу. Поэтому, прежде чем устанавливать обе версии, вам нужно будет выполнить скрипт с:
- одна версия python, которая выходит сама и вызывает другую версию, используя платформу или вычисление переменной длины, как вы упомянули:
struct.calcsize("p")
; - в командной строке (например, сценарий оболочки, командный файл);
- через внешнюю программу (например, Excel/Access VBA, Java, C#, php.exe);
Внешние приложения должны будут выбрать, какая версия будет запускать скрипт python, на основе установленного драйвера ODBC, рассматривая ключ реестра как индикатор или размер переменной типа. Это также может потребовать создания переменных пути для обеих версий python.exe и быть уверенным, что они не конфликтуют друг с другом, выбрав одну из них по умолчанию.
Многие предпочитают развертывать две версии приложения в зависимости от среды процессора пользователя.