【问题标题】:SQL CE connection with PythonSQL CE 与 Python 的连接
【发布时间】:2017-01-31 22:39:01
【问题描述】:

问题陈述:将存储在.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)

错误信息:

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: name 'Dispatch' 没有定义

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

Traceback(最近一次调用最后一次):

文件“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 raise api.InterfaceError ("Windows COM Error: Dispatch('ADODB.Connection') failed.") adodbapi.apibase.InterfaceError: Windows COM 错误: Dispatch('ADODB.Connection') 失败。

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

Traceback(最近一次调用最后一次):

文件“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 行,在连接中 raise 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"')

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

谢谢你, 真挚地, 京东。

【问题讨论】:

  • 你 100% 确定它是 3.5 文件而不是 4.0 文件吗?
  • 是的,我在 Visual Studio 中打开了同一个文件。

标签: sql python-3.x sqlconnection adodbapi


【解决方案1】:

看来你有错字:

Provoider => Provider

【讨论】:

  • 是的,我更正了它...我也希望在问题中更正它...但是错误仍然相同...。
【解决方案2】:

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 异常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多