问题陈述:将存储在.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。
答案 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异常不应再引发。