2014-12-20 2 views
1

다음 코드를 가지고 있으며 "입력"테이블의 첫 번째 행에 대해서만 트릭을 수행 할 수 있습니다. 중첩 루프에있는 두 커서 사이에 명확한 관계가 없다는 것을 알고 있지만 중첩 된 for-for 루프를 시도하고 동일한 결과를 얻었습니다. 파이썬 3.4 사용하고 있습니다.커서가있는 중첩 for 루프는 파이썬에서 첫 번째로 원하는 결과 만 가져옵니다.

아이디어는 테이블 비교의 테이블에있는 행을 비교하는 것입니다. 수식에서 주어진 결과가 5보다 작 으면 주어진 테이블의 ids (row [0] & rowx [0])를 출력하고 output이라는 새로운 테이블에있는 수식의 결과. 문제는 입력 테이블의 첫 번째 레코드에서만 작동한다는 것입니다.

db_connection = pypyodbc.connect(connection_str) 
db_connection2 = pypyodbc.connect(connection_str) 
db_connection3 = pypyodbc.connect(connection_str) 

db_cursor = db_connection.cursor() 
db_cursor2 = db_connection2.cursor() 
db_cursor3 = db_connection3.cursor() 

db_cursor.execute("SELECT * FROM input") 
db_cursor2.execute("SELECT * FROM comparetable") 

for row in db_cursor: 
    for rowx in db_cursor2: 
     idoriginal = row[0] 
     idcomparable = rowx[0] 
     result = formula(float(row[1]), float(row[2]), float(rowx[1]), float(rowx[2])) 
     if result < 5: 
      db_cursor3.execute("INSERT INTO output (id, idcomparable, result) VALUES (?, ?, ?)",(idoriginal, 
           idcomparable, result)) 
     db_cursor3.commit() 

아이디어가 있으십니까? 희망은 어리석은 짓입니다. 나는 이미 이것을 post에 체크했으나 아직도 해결 방법을 모른다.

+2

당신이 설명 할 수 코드 문제에 대해 더 알고 싶습니까? – Kasramvd

+0

'db_connection','db_connection2' 및'db_connection3'은 어떻게 초기화합니까? – NPE

+0

두 번째 질문에 답하기 위해 코드를 편집했습니다. 이 아이디어는 테이블 입력의 행을 비교 가능한 테이블의 행과 비교하고 수식에서 제공된 결과가 5보다 작 으면 주어진 테이블의 ids (row [0] & rowx [0])와 수식은 출력이라고하는 새로운 테이블에 있습니다. 문제는 입력 테이블의 첫 번째 레코드에만 문제가 있다는 것입니다. – Maik

답변

1

for rowx in db_cursor2: 첫 번째 시간은 db_cursor2입니다. 외부 루프를 통해 두 번째 이후의 시간에는 아무 것도 루프되지 않습니다.

그래서, 당신은 너무 후자 가 또 다시에 루프 행이됩니다 for rowx in db_cursor2: 내부 루프 전에, 외부 루프 for row in db_cursor: 내부 db_cursor2.execute("SELECT * FROM comparetable")를 이동해야합니다 -!)

+0

당신은 락! 대단히 감사합니다! – Maik

관련 문제