2016-10-18 3 views
1

나는 매번 pyodbc 쿼리 후에 자동 결과 페치를하고 싶다. 일반적인 상황에서 cursor.fetchall() 호출은 예외가 발생합니다. SQL이 실행되지 않았거나 결과 집합을 반환하지 않은 경우 (예 : SELECT 문이 아닌 경우) 나는 이런 식으로하고 싶다 :예외 처리없이 pyodbc에서 fetchall() 호출을 자동화하려면 어떻게해야합니까?

def execute(query, data): 
    cursor.execute(query, data) 
    cursor.commit() 
    try: 
     result = cursor.fetchall() 
    except pyodbc.ProgrammingError: 
     result = None 
    return result 

예외 처리를 사용하지 않고도 가능하게하는 방법이 있는가? (사용하면 너무 느리다)?

답변

1

다음 실행 샘플 쿼리의 목록, 당신을 위해 일 수있는 예는 다음과 같습니다

sql_to_run = [ 
    "SELECT 10000", 
    "SELECT 2 + 2", 
    "", 
    "SELECT 'HELLO WORLD'", 
] 

for sql in sql_to_run: 
    rows = cursor.execute(sql) 

    if cursor.rowcount: 
     for row in rows: 
      print(row) 

출력 :

(10000,) 
(4,) 
('HELLO WORLD',) 

윌 트릭을 할? 행운을 빕니다!

+1

답변 해 주셔서 감사합니다. 난 당신의 코드를 시도하고 내 'cursor.rowcount'는 ** - 1 **와 같은 결과를 가져올 때와 다른 숫자가 없을 때 같음을 알았다. 그것은 다소 이상하다. (문서에 따르면, 그것은 다른 방향으로 돌아 가야한다.) 그러나 그것은 어쨌든 내 문제를 해결했다. –

+1

몇 가지 이유로'cursor.rowcount'가 잘못된 값과 같은 경우'cursor.description' 속성 (결과가 없을 때'None')을 사용할 수 있다는 것을 알았습니다. –