2011-03-22 8 views
0

내가 다음과 같이 테이블 user_count 정의가 있다고 가정 : 사용자의 기존 레코드가 존재하거나 다른 새 레코드를 삽입 할 때 내가하고 싶은 것은 하나 count 증가이다'중복 증가'를 구현하는 두 가지 방법의 차이점은 무엇입니까?

id   primary key, auto increment 
    user_id  unique 
    count  default 0 

.

try: 
     cursor.execute("INSERT INTO user_count (user_id) VALUES (%s)", user.id) 
    except IntegrityError: 
     cursor.execute("UPDATE user_count SET count = count+1 WHERE user_id = %s", user.id) 

그리고 그것은 또한이 방법으로 구현 될 수있다 :

cursor.execute("INSERT INTO user_count (user_id) VALUES (user_id) ON DUPLICATE KEY UPDATE count = count + 1", user.id) 

이 두 가지 방법의 차이를 무엇을, 한 현재

, 나는 그 (파이썬에서) 이런 식으로 할 더 나은?

답변

1

두 번째 것은 데이터베이스에서 제공하는 기능을 사용하여 여기에있는 문제를 정확히 해결하는 단일 SQL 명령입니다.

더 빠르고 신뢰성이 높아야합니다.

첫 번째 기능은 해당 기능을 사용할 수없는 경우 대체 기능입니다 (이전 데이터베이스 버전?).

1

첫 번째 프로그램 예외를 사용하여 프로그램의 흐름을 지시합니다. 다른 해결책이없는 경우 (예 : 파일에 대한 독점적 액세스 권한을 얻지 않은 경우) 수행해야하는 것은 아닙니다. 또한 데이터베이스를 통해 작업을 처리하는 것이 좋습니다.

두 번째 코드는 데이터베이스의 모든 작업을 처리하므로 쿼리 계획을 매우 효율적으로 최적화 할 수 있습니다.

데이터베이스가 일반적으로 사례를 처리하는 방법을 잘 알고 있기 때문에 두 번째 솔루션을 사용합니다.

+0

+1 - 예외에 대한 예외를 남겨 둡니다. 그리고 im은 데이터베이스가 애플리케이션 코드에 여분의 조건문을 추가하기보다 자신이 잘하는 일을하도록 해줍니다. –

관련 문제