2012-10-31 4 views
1

실패 행 많은 수의 쿼리는 내가 PyMySQL으로 실행하고있어 매우 간단한 쿼리가 있습니다. id은 기본 키입니다.PyMySQL :</p> <pre><code>SELECT `id` FROM `records` ORDER BY `id` DESC </code></pre> <p><code>records</code> 그 안에 150 만 행이 :

이것은 PyMySQL의 제한 사항입니까? 한 번에 너무 많은 행을 쿼리하는 경우 사용해야하는 다른 것이 있습니까?

+1

을 의미합니까? –

+0

~ 2 분 후에 연결이 끊어 졌음을 알리는 예외가 발생합니다. –

+0

작은 쿼리 (예 : 500k 행)에서는 여전히 잘 작동합니다. 150 만 행과 관련이 있습니다. –

답변

2

당신은 여러 smaler 쿼리에 쿼리를 깰 수 : 당신이 실패로 무엇을

from math import ceil 

batch_size = 1000 

for start_at in range(int(ceil(total_rows/1000 * 1.0))): 
    sql = 'SELECT `id` from `RECORDS` ORDER BY `id` DESC LIMIT %i, %i' 
    sql = sql % (start_at * batch_size, batch_size) 
    # fetch rows 
+0

이것은 제가 현재 사용하고있는 것입니다. 거기에 덜 해킹 방법이 있나요? 분명히 단일 쿼리로이 작업을 수행 할 수있는 방법이 있습니까? –

+0

2 분 이상 열려있는 쿼리가 데이터베이스에서 종료 될 수 있습니다. 이 경우 MySQL 구성을 수정해야합니다. mysql-python과 같은 다른 mysql 패키지에서 어떤 일이 일어날 지 알 것이다. 커서를 사용해 볼 수도 있습니다. –

+0

흥미 롭습니다. "SHOW VARIABLES LIKE 'wait_timeout';" MySQL에서, 그것은 적어도 두 시간 이상인 7800을 제공합니다 ... –

관련 문제