UPDATE和INSERT在Python中不起作用

时间:2012-08-23 02:08:35

标签: python mysql

我使用此代码来检索id。它有效:

        db = MySQLdb.connect("localhost","root","","proyectoacademias" )

        cursor = db.cursor()

        sql = "SELECT id FROM test WHERE url=\'"
        sql = sql + self.start_urls[0]
        sql = sql + "\'"

        cursor.execute(sql)

        data = cursor.fetchone()

        for row in data:
            self.id_paper_web=str(row)

        db.close()

它为我提供了我必须更新的当前行的ID ...

但是后来我尝试更新或插入,它不起作用....

    def guardarDatos(self):
    db = MySQLdb.connect("localhost","root","","proyectoacademias" )

    cursor = db.cursor()

    sql = "UPDATE test SET abstract=\'"+str(self.abstracto)+"\', fecha_consulta=\'"+str(self.fecha_consulta)+"\', anio_publicacion=\'"+str(self.anio_publicacion)+"\', probabilidad="+str(self.probabilidad)+" WHERE id = "+str(self.id_paper_web)

    print "\n\n\n"+sql+"\n\n\n"
    cursor.execute(sql)      

    for i in range (len(self.nombres)):
        sql = "INSERT INTO test_autores VALUES (\'"+self.nombres.keys()[i]+"\', "+str(self.id_paper_web)+", \'"+self.instituciones[self.nombres[self.nombres.keys()[i]]]+"\', "+str((i+1))+")"
        print "\n\n\n"+sql+"\n\n\n"
        cursor.execute(sql)

    db.close()

我打印我发送的每个sql查询,它们似乎没问题......没有抛出异常,只是数据库中没有更新或插入......

1 个答案:

答案 0 :(得分:3)

您必须提交...或将数据库设置为自动提交

db.commit()

很多py sqlite3教程

  

默认情况下,sqlite3模块在a之前隐式打开事务   数据修改语言(DML)声明(即   INSERT / UPDATE / DELETE / REPLACE),并隐式提交事务   在非DML,非查询语句之前(即除了之外的任何其他语句)   选择或上述)。

     

因此,如果您在事务中并发出类似CREATE的命令   TABLE ...,VACUUM,PRAGMA,sqlite3模块将隐式提交   在执行该命令之前。这样做有两个原因。   首先是其中一些命令不起作用   交易。另一个原因是sqlite3需要跟踪   事务状态(如果事务处于活动状态)。

     

您可以隐式控制sqlite3的哪种BEGIN语句   通过isolation_level参数执行(或根本不执行)   connect()调用,或通过connections的isolation_level属性。

     

如果需要自动提交模式,请将isolation_level设置为None。

     

否则将其保留为默认值,这将导致普通   “BEGIN”语句,或将其设置为SQLite支持的隔离之一   级别:“DEFERRED”,“IMMEDIATE”或“EXCLUSIVE”。