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
答案 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'