在更新前插入时是否需要提交代码?
我有以下的SQL代码:
INSERT IGNORE...
UPDATE ITEM...
我需要在这两个语句之间执行一次conn.commit()吗?还是说我可以在最后一次性提交所有的更改,这样更新就会自动处理那些已经“准备好提交”的内容呢?
self.cursor.execute('INSERT IGNORE INTO main_catalog (apple_id, provider_id) VALUES (%s, %s)', (apple_id, provider_obj))
self.conn.commit() # IS THIS NEEDED HERE?
self.cursor.execute('''UPDATE main_catalog SET
show_title=%s, artwork_apple_url=%s, title=%s, itunes_url=%s,
network_name=%s, video_length=%s, episode_production_number=%s,
synopsis=%s, date_last_updated_affiliate=NOW()''',
(show_title, artwork_apple_url, episode_title, itunes_url, network_name, video_length, episode_production_number, synopsis))
1 个回答
0
不,提交(commit)并不是必须的,除非你要关闭连接。提交可以在长时间的操作之间使用,以保存当前的状态,从而提高性能。但即使不提交,之前的修改依然存在,只是还没有保存到硬盘上,直到你执行提交(或者在自动提交的情况下,甚至更早)。
不建议提交一个临时状态,因为在两个提交之间你处于一个“事务”(transaction)中,这意味着你可以确保要么所有的更改都完成,要么一个都不完成,这通常是我们希望的。所以,如果没有其他的指示,最好只提交稳定的数据。