【发布时间】:2023-11-05 20:51:01
【问题描述】:
我正在尝试使用以下代码查询 SQL Server 2012 数据库:
import pyodbc
class sqlserverConnector:
def __init__(self, connectionString):
"""
this is a typical connection string using windows authentication and the DSN manager:
'DSN=python;Trusted_Connection=yes'
"""
self._conn = pyodbc.connect(connectionString)
self._curs = self._conn.cursor()
self.fetchall = self._curs.fetchall
self.description = self._curs.description
self.columns = dict()
def __del__(self):
self._conn.close()
def __iter__(self):
return self._curs.__iter__()
# executes SQL statements
def execute(self, statement, **params):
if params is None:
self._curs.execute(statement)
else:
self._curs.execute(statement,params)
# creates a dictionary of column names and positions
if self._curs.description != None:
self.columns = dict((field[0], pos) for pos, field in enumerate(self._curs.description))
else:
None
还有:
from sqlutil import *
sqlcnxn = sqlserverConnector('DSN=python;Trusted_Connection=yes')
rows = sqlcnxn.execute("select * from demographics", params=None)
for row in rows:
print row
break
目标是打印出一行(表格有 80k+ 行)。但是我总是收到此错误消息:
pyodbc.ProgrammingError: ('The SQL contains 0 parameter markers, but 1 parameters were supplied', 'HY000')
我用谷歌搜索了一下,似乎由于不同的原因,不同的人会弹出这个问题,而且我发现没有一个解决方案适合我的错误。我认为正在发生的事情是 execute 方法默认使用第一个 else 语句而不是第一个 if 语句。
【问题讨论】: