루프에 문제가 있습니다.루프에 오류가 있습니다. ('SQL에는 매개 변수 마커가 1 개 있지만 매개 변수 4 개가 제공되었습니다.', 'HY000')
for i in theList:
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))
theList
는 다음과 같이 정의된다 : 다음과 같이 내가 루프가
theList=process_query('SELECT DISTINCT SSN FROM Employee', None)
이 이제 오류없이 작동, 마지막으로 감사 beargle합니다. 그러나 나는 내가 해결할 수없는 또 다른 문제를 발견, 즉 그 나는 아래 process_query 함수를 호출 할 때 :
def process_query(query, parameters):
if(parameters is None):
cursor1.execute(query)
else:
cursor1.execute(query, parameters) (*LINE 33)
n=0
lista = []
while 1:
row = cursor1.fetchone()
if not row:
break
lista.append(row[0])
n = n+1
return lista
말썽 이제 프로그램이 두 번째 cursor1.execute에 불만이다 (A 별표 표시, *) 그 '(SQL은 1 개의 매개 변수 마커를 포함하고 있지만 4 개의 매개 변수가 제공되었습니다', 'HY000') 나는 그것이 i
에서 유래했다고 생각합니다. 이는 사회 보장 번호이며 따라서 한 자리 숫자가 아니지만 이것을 해결하는 방법을 이해할 수는 없습니다 발행물.
편집 : 여기에 전체 인쇄와 전체 루프 온다! 다음 인쇄 (참고를 제공
루프 (일부 정의)
theList=process_query('SELECT DISTINCT SSN FROM Employee', None)
temp=[]
for i in theList:
temp=process_query('SELECT FName, LName FROM Employee WHERE SSN= ?', (i)) (LINE 71)
known_hours=process_query('SELECT DISTINCT SUM(Coalesce(Hours,0)) FROM Works_On WHERE ESSN=?',(i))
temp.append(known_hours)
unknown_hours=process_query('SELECT Distinct COUNT(*) FROM Works_On WHERE ISNULL(Hours) AND ESSN=?', (i))
unknown_hours=map(int,unknown_hours)
temp.append(unknown_hours)
if(unknown_hours > 0):
temp.append('Yes')
else:
temp.append('No')
theList.append(temp)
print theList
필자도 업데이트 process_query 그것은 출력합니다 있도록 쿼리 (순서대로) 매개 변수를 설정합니다.
SELECT DISTINCT SSN FROM Employee
None
SELECT FName, LName FROM Employee WHERE SSN= ?
123456789
SELECT DISTINCT SUM(Coalesce(Hours,0)) FROM Works_On WHERE ESSN=?
123456789
SELECT Distinct COUNT(*) FROM Works_On WHERE ISNULL(Hours) AND ESSN=?
123456789
SELECT FName, LName FROM Employee WHERE SSN= ?
333445555
SELECT DISTINCT SUM(Coalesce(Hours,0)) FROM Works_On WHERE ESSN=?
333445555
SELECT Distinct COUNT(*) FROM Works_On WHERE ISNULL(Hours) AND ESSN=?
333445555
SELECT FName, LName FROM Employee WHERE SSN= ?
453453453
SELECT DISTINCT SUM(Coalesce(Hours,0)) FROM Works_On WHERE ESSN=?
453453453
SELECT Distinct COUNT(*) FROM Works_On WHERE ISNULL(Hours) AND ESSN=?
453453453
SELECT FName, LName FROM Employee WHERE SSN= ?
666884444
SELECT DISTINCT SUM(Coalesce(Hours,0)) FROM Works_On WHERE ESSN=?
666884444
SELECT Distinct COUNT(*) FROM Works_On WHERE ISNULL(Hours) AND ESSN=?
666884444
SELECT FName, LName FROM Employee WHERE SSN= ?
888665555
SELECT DISTINCT SUM(Coalesce(Hours,0)) FROM Works_On WHERE ESSN=?
888665555
SELECT Distinct COUNT(*) FROM Works_On WHERE ISNULL(Hours) AND ESSN=?
888665555
SELECT FName, LName FROM Employee WHERE SSN= ?
987654321
SELECT DISTINCT SUM(Coalesce(Hours,0)) FROM Works_On WHERE ESSN=?
987654321
SELECT Distinct COUNT(*) FROM Works_On WHERE ISNULL(Hours) AND ESSN=?
987654321
SELECT FName, LName FROM Employee WHERE SSN= ?
987987987
SELECT DISTINCT SUM(Coalesce(Hours,0)) FROM Works_On WHERE ESSN=?
987987987
SELECT Distinct COUNT(*) FROM Works_On WHERE ISNULL(Hours) AND ESSN=?
987987987
SELECT FName, LName FROM Employee WHERE SSN= ?
999887777
SELECT DISTINCT SUM(Coalesce(Hours,0)) FROM Works_On WHERE ESSN=?
999887777
SELECT Distinct COUNT(*) FROM Works_On WHERE ISNULL(Hours) AND ESSN=?
999887777
SELECT FName, LName FROM Employee WHERE SSN= ?
['John', [Decimal('40.0')], [0], 'Yes']
Traceback (most recent call last):
File "sumrpt2.py", line 72, in <module>
temp=process_query('SELECT FName, LName FROM Employee WHERE SSN= ?', (i))
File "sumrpt2.py", line 35, in process_query
cursor1.execute(query, parameters)
pyodbc.ProgrammingError: ('The SQL contains 1 parameter markers, but 4 parameters were supplied', 'HY000')
사람은 단서가?
감사합니다, Cenderze
process_query 함수의 (*) 란 무엇입니까? 'print_query' 함수의 첫 줄에'print query, parameters'를 추가하고 질문을 ** full ** 출력으로 업데이트하십시오. – Bryan
@beargle 답장을 보내 주셔서 대단히 감사합니다! 그 지문과 현재 출력물을 추가했습니다. process_query의 애 스터 릭스는 컴파일러가 오류를 불평하는 곳일 뿐이며, 정확하게 편집 한 내용이 더 명확합니다. – Cenderze
'theList'는 SSN 만 포함해야하지만 ' ['John ', [Decimal ('40 .0')], [0], 'Yes']'어떻게 든 추가됩니다. 데이터 소스가 유효한 SSN 만 반환하는지 확인하십시오. – Bryan