在windows7上使用adodbapi
2.6包时,当多个参数被传递到SQL查询时,Python将崩溃(生成一个“Python has stopped working”弹出窗口)。我正在尝试向ADO连接游标传递参数,以查询SQL Server Compact数据库(.sdf)。你知道吗
我也尝试了正常的字符串格式,它工作正常,但根据许多stackoverflow讨论,这是一个安全缺陷。你知道吗
我的代码如下:
import adodbapi as ado
#connection provider
provider = "Microsoft.SQLSERVER.CE.OLEDB.4.0"
#database location path
filePath = "results.sdf"
#max size of database file in MB
maxSize = "4000"
#combine into connection string
connectionString = ("Provider = {}; Data Source = {}; SSCe:Max Database Size = {}"
.format(provider, filePath, maxSize))
#create connection
dbConnection = ado.connect(connectionString)
#create cursor
cursor = dbConnection.cursor()
cursor.execute("--THE QUERIES DESCRIBED BELOW--") #**** location of fault****
print(cursor.fetchall().ado_results)
cursor.close()
传递一个参数就可以了,例如:
cursor.execute("SELECT MeasurementId, Decimals FROM Compound WHERE MeasurementId >= ?", (11774,))
执行非参数化查询也可以,例如:
cursor.execute("SELECT MeasurementId, Decimals FROM Compound WHERE (MeasurementId >= 11774 AND MeasurementId <= 11779)")
但是当使用两个参数尝试完全相同的查询时,它会使python崩溃,并且在编辑器中不会生成错误消息,例如:
cursor.execute("SELECT MeasurementId, Decimals FROM Compound WHERE (MeasurementId >= ? AND MeasurementId <= ?)", (11774, 11779))
从命令提示符(在Windows 7中)运行文件时,会生成一个弹出窗口,声称“Python已停止工作”,其中包含一系列信息:
Problem Event Name BEX64
Application Name: python.exe
Fault Module Name: MSVCR90.dll
Fault Module Version: 9.0.30729.6161
Exception Code: c0000417
OS Version: 6.1.7601.2.1.0.256.4
然后进程退出(在JupyterLabs/VSCode上尝试时,它会冻结内核)
我尝试过以列表的形式传递参数,使用不同的paramastyle(format&name,尽管我认为adodbapi会将其全部转换回标准qmark格式),更改光标设置,以及不同的多参数查询,所有这些都具有相同的结果。你知道吗
这是参数传递的正确用法吗?我知道您不应该传递表或列名,但这似乎是一个正确的查询,应该可以很好地执行。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐