gpt4 book ai didi

python - pymysql 事务保存一个插入查询但忽略两个更新查询而不引发错误

转载 作者:行者123 更新时间:2023-11-30 21:28:00 26 4
gpt4 key购买 nike

基本上,我正在尝试使用 pymysql 事务设置 PyQt5 表单的保存方法。保存意味着对新记录的一次插入查询,以及作为插入结果的两次更新。方法运行顺利,但是待更新的两个表没有变化。没有出现错误,插入确实有效。

最初您尝试使用 SqlDatabase 来建立事务,但我无法设置它。似乎需要为 MySQL 开发一个驱动程序,或者可能已经有一个但找不到。在这方面的任何建议将不胜感激。

def saveAndClose(self):
"""Requires to:
- Save (Insert) new record in mortality table.
- Update agreementhorses table - (active = False)
- Update horses table - (active = False).
- Refresh the dockMortality query in the main form.
- Refresh this form horse query.
"""
try:
cnn = pymysql.connect(**self.con_string)
cnn.begin()
with cnn.cursor() as cur:
sql_mortality = """ INSERT INTO mortality
(dod, agreementhorseid, causeid, diagnose, veterinaryid,
notes)
VALUES (%s, %s, %s, %s, %s, %s)"""
self.comboVet.setModelColumn(0)
self.comboCause.setModelColumn(0)
parameters = (self.dateOfDeath.date.toString('yyyy-MM-dd'),
self.record.value(8),
self.comboCause.currentText(),
self.lineDiagnosis.text(),
self.comboVet.currentText(),
self.textNotes.toPlainText())
cur.execute(sql_mortality, parameters)
sql_horses = """ UPDATE horses
SET active = False
WHERE id = %s"""
cur.execute(sql_horses, (self.record.value(8)),)
sql_agreementhorses = """ UPDATE agreementhorses
SET active = False
WHERE id = %s"""
cur.execute(sql_agreementhorses, (self.record.value(9),))
cnn.commit()
except pymysql.Error as e:
QMessageBox.Warning("saveAndClose", (type(e).__name__, e.args))
cnn.rollback()
except AttributeError as err:
print(err.args)
cnn.rollback()
except Exception as err:
print(type(err).__name__, err.args)
cnn.rollback()
finally:
self.comboVet.setModelColumn(1)
self.comboCause.setModelColumn(1)
"""Resets the active horses list for this particular agreement"""
self.tableHorses.model().setQuery(self.getHorsesQuery())
"""Resets the mortality list for this particular agreement on
the main form subform"""

self.parent.tableMortality.model().\
setQuery(self.parent.queryMortality())
"""Clear the form for the next record to be entered"""
self.clearForm()

我希望事务能够正常执行,插入一个表并更新另外两个。同时我会尝试用MySql.connector建立事务作为新的尝试。

最佳答案

交易工作正常。我在放置更新查询的参数时犯了一个错误。我将第一个查询作为第二个查询的参数,反之亦然。我花了一些时间来弄清楚这一点。我向所有试图找出我不存在的问题的人道歉。简而言之,“self.record.value(8)”应该是“self.record.value(9)”,反之亦然。

关于python - pymysql 事务保存一个插入查询但忽略两个更新查询而不引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57915553/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com