Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL:在python中的一个commit语句中删除和插入_Python_Mysql_Commit - Fatal编程技术网

MySQL:在python中的一个commit语句中删除和插入

MySQL:在python中的一个commit语句中删除和插入,python,mysql,commit,Python,Mysql,Commit,我有一个非常简单的问题:我正在使用MySQL和Python。我想先删除表中的内容,然后插入新数据,从而重新填充表。然而,我不希望在这个过程中有一个空表(或者至少在非常短的时间内) 因此,据我记忆所及,我可以组合几个SQL命令,然后将它们提交到数据库。这确保了一切都按照我的描述进行。所以我想知道我的猜测是否正确 conn = mysql.connector.connect( **Configuration.conn_params ) c = conn.cursor(

我有一个非常简单的问题:我正在使用MySQL和Python。我想先删除表中的内容,然后插入新数据,从而重新填充表。然而,我不希望在这个过程中有一个空表(或者至少在非常短的时间内)

因此,据我记忆所及,我可以组合几个SQL命令,然后将它们提交到数据库。这确保了一切都按照我的描述进行。所以我想知道我的猜测是否正确

        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大约为多长时间?