AttributeError:'MySQLCursor'对象没有属性'commit'

时间:2015-06-15 09:44:48

标签: python mysql

def fillblast(sequentie, titel_lijst, score_lijst, e_lijst, iden_lijst, pos_lijst, gaps_lijst): 
    conn = mysql.connector.connect(host = "ithurtswhenip.nl", user = "pg2", password = "pg2", database= "pg2", port= "3307") 
    cursor = conn.cursor()
    Blast = 1000
    for i in range(0,len(titel_lijst)):
        Blast =+ 2
        cursor.execute("INSERT INTO `pg2`.`Blast` (`Blast_id`, `Blast_seq`, `Blast_titel`, `Blast_score`, `Blast_E`, `Blast_gaps`, `Blast_pos`, `Blast_iden`) VALUES (%s, %s, %s, %s, %s, %s, %s, %s);", (Blast, sequentie[i] ,titel_lijst[i], score_lijst[i], e_lijst[i], iden_lijst[i], pos_lijst[i], gaps_lijst[i]))
        print("1 record toegevoegd")
    cursor.commit()
    cursor.close() 
    conn.close()

我收到以下错误:

AttributeError: 'MySQLCursor' object has no attribute 'commit'

它是怎么来的,哪里出错了? 我尝试连接MySQLWorkbench。

编辑:

现在我收到以下错误:

mysql.connector.errors.DatabaseError: 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

2 个答案:

答案 0 :(得分:17)

因为你无法提交游标!你必须提交连接。

# cursor.commit() --> This is wrong!
conn.commit()  # This is right

Check the docs ...

答案 1 :(得分:1)

在修复一些旧代码(显然已经工作了几年,因此用户停止尝试使用它)的同时,我们在Django中使用MySQL-python包遇到了相同的错误。但是,使用此建议以及其他答案的建议会导致不同的错误,因为它发生在Django ORM中:

  

django.db.transaction.TransactionManagementError:此代码不是   在交易管理下

因此,对于那些在使用conn.commit()而不是cursor.commit()之后遇到此错误的人,您可以使用leave_transaction_management try: conn.enter_transaction_management() cursor = conn.cursor() cursor.execute(sql) conn.commit() except DatabaseError as e: cursor.rollback() log.warning('log warning here') # Handle other exceptions here. finally: if cursor: cursor.close() conn.leave_transaction_management() (请注意,这是针对Django的1.4.6和MySQL-python 1.2.5;一旦完成Django升级,我可能必须更新它):

su 'theadminName'