Соединение 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 ответ
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, описанное выше, больше не должно вызываться.