与Python

时间:2017-01-31 22:39:02

标签: sql python-3.x sqlconnection adodbapi

问题陈述:将存储在.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 =在 CoIninialize v2.1.1 adamvan之后调度(' ADODB.Connection')#connect   NameError:name' Dispatch'未定义

在处理上述异常期间,发生了另一个异常:

追踪(最近一次呼叫最后一次):

  

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

在处理上述异常期间,发生了另一个异常:

追踪(最近一次呼叫最后一次):

  

文件" 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,message)   adodbapi.apibase.OperationalError :( InterfaceError(" Windows COM错误:Dispatch(' ADODB.Connection')失败。",),'打开与&#34的连接时出错; Provoider = Microsoft.SQLSERVER.MOBILE.OLEDB.3.5;数据源= D:\ Work \ Programming \ Python \ SQL_DataTransfer \ LF.sdf;持久安全信息=假; SSCE:最大数据库大小= 4091"&#39 ;)

此时,我们非常感谢任何帮助。

谢谢你, 此致 JD。

2 个答案:

答案 0 :(得分:1)

看起来你有一个错字:

Provoider => Provider

答案 1 :(得分:0)

adodbapi 版本 ='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异常不应再引发。