Соединение SQL CE с Python

Постановка проблемы: Извлеките данные, хранящиеся в файле.sdf, в python. Конфигурация системы: Win 10 Pro 64-bit, python 3.5.2-64 bit, библиотека adodbapi, SQL CE 3.5

Я довольно новичок в программировании, и я выбрал Python в качестве первого языка для изучения. В настоящее время я столкнулся с проблемой процесса подключения файла SQL CE 3.5 .sdf.

Я использовал библиотеку adodbapi. За прошедшую неделю я много раз искал в Интернете, чтобы найти решение этой проблемы и убедиться в правильности строки подключения. Я пробовал несколько вариантов / решений, предоставленных для переполнения стека и https://www.connectionstrings.com/microsoft-sqlserver-ce-oledb-3-5/.

Код:

import adodbapi

cons_str = "Provider=Microsoft.SQLSERVER.MOBILE.OLEDB.3.5;" \
           "Data Source=D:\Work\Programming\Python\SQL_DataTransfer\LF.sdf;"\
           "Persist Security Info=False;" \
           "SSCE:Max Database Size=4091"

connection = adodbapi.connect(cons_str)
print(connection)

Сообщение об ошибке:

Traceback (последний вызов был последним):

Файл "D:\Work\Programs\Python35.virtualenvs\sql_output\lib\site-packages\adodbapi\adodbapi.py", строка 93, в make_COM_connecter c = Dispatch('ADODB.Connection') #connect после CoIninialize v2.1.1 adamvan NameError: имя 'Dispatch' не определено

Во время обработки вышеупомянутого исключения произошло другое исключение:

Traceback (последний вызов был последним):

Файл "D:\Work\Programs\Python35.virtualenvs\sql_output\lib\site-packages\adodbapi\adodbapi.py", строка 112, в файле connect co.connect(kwargs) Файл "D: \ Work \ Programs \ Python35. virtualenvs \ sql_output \ lib \ site-packages \ adodbapi \ adodbapi.py ", строка 269, в файле connect self.connector = connection_maker() Файл" D: \ Work \ Programs \ Python35.virtualenvs \ sql_output \ lib \ site-packages \ " adodbapi \ adodbapi.py ", строка 95, в make_COM_connecter поднять api.InterfaceError (" Ошибка Windows COM: ошибка отправки ('ADODB.Connection').") adodbapi.apibase.InterfaceError: Ошибка Windows COM: отправка ('ADODB.Connection ') не удалось.

Во время обработки вышеупомянутого исключения произошло другое исключение:

Traceback (последний вызов был последним):

Файл "D:/Work/Programming/Python/SQL_DataTransfer/SQL_CE_reportDB.py", строка 8, в файле connection = adodbapi.connect(cons_str) Файл "D: \ Work \ Programs \ Python35.virtualenvs \ sql_output \ lib \ site-packages \ adodbapi \ adodbapi.py ", строка 116, в соединении поднять api.OperationalError(e, сообщение) adodbapi.apibase.OperationalError: (InterfaceError(" Ошибка Windows COM: ошибка отправки ("ADODB.Connection"). ",), "Ошибка открытия соединения с"Provoider=Microsoft.SQLSERVER.MOBILE.OLEDB.3.5; Источник данных =D:\Work\Programming\Python\SQL_DataTransfer\LF.sdf; Постоянная информация о безопасности = Ложь;SSCE: Макс. Размер базы данных =4091" ")

На данный момент любая помощь высоко ценится.

Спасибо, С уважением, JD.

1 ответ

Похоже, у вас есть опечатка:

Provoider => Provider

adodbapi version = '2.6.0.6' зависит от pypiwin32, который будет установлен в вашей среде Python. Для adodbapi.py из строки 51:

if api.onIronPython:
    from System import Activator, Type, DBNull, DateTime, Array, Byte
    from System import Decimal as SystemDecimal
    from clr import Reference
    def Dispatch(dispatch):
        type = Type.GetTypeFromProgID(dispatch)
        return Activator.CreateInstance(type)
    def getIndexedValue(obj,index):
        return obj.Item[index]
else: # try pywin32
    try:
        import win32com.client
        import pythoncom
        import pywintypes
        onWin32 = True
        def Dispatch(dispatch):
            return win32com.client.Dispatch(dispatch)
    except ImportError:
        import warnings
        warnings.warn("pywin32 package (or IronPython) required for adodbapi.",ImportWarning)
    def getIndexedValue(obj,index):
        return obj(index)

В моей ситуации я проследил тот факт, что функция Dispatch не была определена, потому что в строке 62 генерируется исключение ImportError (import win32com.client), перехваченное в блоке exc, но по какой-то причине предупреждающее сообщение не отображалось в моей консоли.

Пытаться:

pip install pypiwin32

и исключение ImportError, описанное выше, больше не должно вызываться.

Другие вопросы по тегам