我的Python odbc代码有问题。我无法使用以下代码:temp=process_query("SELECT FName, LName FROM Employee WHERE SSN='%s'" %i)
known_hours=process_query("SELECT DISTINCT Coalesce(Hours,0)
FROM Works_On WHERE ESSN='%s'" %i)
temp.append(known_hours)
其中process_query的形式为:
^{pr2}$
(process_query会继续一些,但这仅仅是为了打印目的,当我在web上搜索我的问题时,问题似乎在于我如何调用execute函数,因此我省略了函数的其余部分)。在
当我试图执行此程序时收到的错误是:pyodbc.ProgrammingError: ('42000', "[42000] [MySQL][ODBC 5.1 Driver][mysqld-5.1.66-0+squeeze1-log]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'John', [Decimal('32.5'), Decimal('7.5')], 'Yes']'' at line 1 (1064) (SQLExecDirectW)")
如果有人知道如何省略“十进制”当我打印,而只是有一个例子32.5,以及希望得到帮助。在
另外,我知道关于这个问题已经有好几个话题了,但是我还没有看到和理解select语句的问题。在
编辑
关于“我”的实施方式如下:
我有一个名为“列表”的初始列表,其中包含所有相关的社会保障号码,SSN,然后我像这样“循环”查看:for i in theList:
temp=process_query("SELECT FName, LName FROM Employee WHERE SSN='%s'" %i)
known_hours=process_query("SELECT DISTINCT SUM(Coalesce(Hours,0)) FROM Works_On WHERE ESSN='%s'" %i)
temp.append(known_hours)
unknown_hours=process_query("SELECT Distinct COUNT(*) FROM Works_On WHERE ISNULL(Hours) AND ESSN='%s'" %i)
temp.append(unknown_hours)
编辑
我已经按照比格尔的建议改了。然而,我现在遇到了另一个错误,那就是,由于我在列表中循环使用I(社会保障号码),我必须在之前定义这些号码。在
所以我用这条线theList=process_query('SELECT DISTINCT SSN FROM Employee', None)
我将流程查询更新为:def process_query(query, parameters):
if(parameters is None):
cursor1.execute(query)
else:
cursor1.execute(query, parameters) (*)
n=0
lista = []
while 1:
row = cursor1.fetchone()
if not row:
break
lista.append(row[0])
n = n+1
if n==0:
print "No tuples matching the given query were found."
return lista
现在的问题是程序在第二个cursor1.execute(用星号*标记)抱怨('SQL包含1个参数标记,但是提供了4个参数','HY000'),我相信这是因为我是一个社会安全数字,因此不是一个单位数整数,但我不知道如何解决这个问题。在
我现在叫我的as:temp=process_query('SELECT FName, LName FROM Employee WHERE SSN= ?', i)
known_hours=process_query('SELECT DISTINCT SUM(Coalesce(Hours,0)) FROM Works_On WHERE ESSN=?', i)
列表中的i在定义温度的循环之前标识,如下所示:theList=process_query('SELECT DISTINCT SSN FROM Employee', None)
它删除了所有其他的错误,但给了我一个新的,如前所述。另外,我试图将“I”转换为int(I)和map(int,I),而不从错误中获得释放。在