2012-02-19 16 views
3

У меня есть сценарий python, который составляет около десяти INSERTs в базе данных MySQL. Это его нынешняя структура:Множественные исполнения с использованием MySQLdb

conn = MySQLdb.connect (host = DB_HOST, 
         port = DB_PORT, 
         user = DB_USER, 
         passwd = DB_PASSWORD, 
         db = DB_NAME) 
cursor = conn.cursor() 
cursor.execute("INSERT INTO...") 
# do some stuff, then another INSERT 
cursor.execute("INSERT INTO...") 
# do some other stuff, then another INSERT 
cursor.execute("INSERT INTO...") 
etc... 
conn.commit() 
cursor.close() 
conn.close() 

ли выше правильный способ сделать несколько вставок, или я должен закрывать курсор после каждого INSERT? Должен ли я делать commit после каждого INSERT?

ответ

3

Следует ли закрывать курсор после каждого INSERT?

Это не имеет большого значения. Курсоры многократно используются.

Вы можете закрыть их, чтобы быть в курсе ваших ресурсов.

Сделайте это.

from contextlib import closing 
with closing(conn.cursor()) as cursor: 
    cursor.execute("INSERT INTO...") 

Это гарантирует, что курсор закрыт независимо от того, какие исключения происходят.

Должен ли я совершать фиксацию после каждого INSERT?

Это зависит от того, что ожидается от вашего приложения.

Если это предложение «все или ничего», то вы совершаете одно совершение. Все вставки хороши или ни одна из них не является.

Если частичные результаты приемлемы, вы можете зафиксировать их после каждой вставки.

Смежные вопросы