1

问题陈述:将存储在 .sdf 文件中的数据提取到 python。系统配置:Win 10 Pro 64 位、python 3.5.2-64 位、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)

错误信息:

回溯(最近一次通话最后):

文件“D:\Work\Programs\Python35.virtualenvs\sql_output\lib\site-packages\adodbapi\adodbapi.py”,第 93 行,在 make_COM_connecter c = Dispatch('ADODB.Connection') #connectCoIninialize v2.1.1 adamvan NameError:未定义名称“调度”

在处理上述异常的过程中,又出现了一个异常:

回溯(最近一次通话最后):

文件“D:\Work\Programs\Python35.virtualenvs\sql_output\lib\site-packages\adodbapi\adodbapi.py”,第 112 行,连接 co.connect(kwargs) 文件“D:\Work\Programs\Python35. virtualenvs\sql_output\lib\site-packages\adodbapi\adodbapi.py”,第 269 行,在连接 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 Error: Dispatch('ADODB.Connection') failed.") adodbapi.apibase.InterfaceError: Windows COM Error: Dispatch('ADODB.Connection ') 失败的。

在处理上述异常的过程中,又出现了一个异常:

回溯(最近一次通话最后):

文件“D:/Work/Programming/Python/SQL_DataTransfer/SQL_CE_reportDB.py”,第 8 行,连接 = adodbapi.connect(cons_str) 文件“D:\Work\Programs\Python35.virtualenvs\sql_output\lib\site-packages \adodbapi\adodbapi.py",第 116 行,在连接中引发 api.OperationalError(e, message) adodbapi.apibase.OperationalError: (InterfaceError("Windows COM Error: Dispatch('ADODB.Connection') failed.",), '打开与“Provoider=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”的连接时出错')

在这一点上,任何帮助都非常感谢。

谢谢你,真诚的,JD。

4

2 回答 2

1

看起来你有一个错字:

Provoider => Provider
于 2017-02-01T07:19:57.087 回答
1

adodbapi version = '2.6.0.6' 取决于要在 Python 环境中安装的 pypiwin32。对于 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) 在 except 块中捕获,但由于某种原因,警告消息没有显示在我的控制台中。

尝试:

pip install pypiwin32

并且不应再引发上述 ImportError 异常。

于 2019-02-06T12:00:23.517 回答