MySQL:在python中的一个commit语句中删除和插入
我有一个非常简单的问题:我正在使用MySQL和Python。我想先删除表中的内容,然后插入新数据,从而重新填充表。然而,我不希望在这个过程中有一个空表(或者至少在非常短的时间内) 因此,据我记忆所及,我可以组合几个SQL命令,然后将它们提交到数据库。这确保了一切都按照我的描述进行。所以我想知道我的猜测是否正确MySQL:在python中的一个commit语句中删除和插入,python,mysql,commit,Python,Mysql,Commit,我有一个非常简单的问题:我正在使用MySQL和Python。我想先删除表中的内容,然后插入新数据,从而重新填充表。然而,我不希望在这个过程中有一个空表(或者至少在非常短的时间内) 因此,据我记忆所及,我可以组合几个SQL命令,然后将它们提交到数据库。这确保了一切都按照我的描述进行。所以我想知道我的猜测是否正确 conn = mysql.connector.connect( **Configuration.conn_params ) c = conn.cursor(
conn = mysql.connector.connect( **Configuration.conn_params )
c = conn.cursor()
sql = """DELETE FROM mytable;"""
c.execute( sql )
sql = """INSERT INTO mytable
( col1, col2, col3 )
VALUES
( val1, val2, val3);"""
c.execute( sql )
conn.commit() #run the deletion and insertion of table data "simultaneously"
conn.close()
前提是:
mytable
使用事务存储引擎(例如InnoDB);及autocommit
连接参数的默认(false)值然后,从任何其他数据库会话的角度来看,这两个操作将以原子方式执行(作为一个操作):它们不会立即看到数据库中的中间状态(即记录已被删除,但新记录尚未插入)。使用
TRUNCATE
,它的速度更快,因为它不会逐行删除@BartFriederichs:TRUNCATE
导致隐式提交。@eggyal不知道这一点。谢谢@toom:如果您不重写autocommit
连接参数的默认(false)值,那么您的“猜测”对我来说很好。谢谢您的回答:那么该表的emtpy大约为多长时间?