gpt4 book ai didi

python - 更新准备好的语句执行不正确

转载 作者:行者123 更新时间:2023-11-29 18:35:45 25 4
gpt4 key购买 nike

所以我正在使用 SQLAlchemy 和 MySQL 在 Python 3.5.2 venv 中工作。我正在尝试更新表中订单(行)的状态。这只需要简单地更改一行中一列的值。下面显示了我正在使用的函数:

def update_order_status(self, order):
newstatus = self.orderwindow.status.currentIndex()
orderid = order.orderid

stmt = update(Order)\
.where(Order.orderid == orderid).values(status=newstatus)

session.execute(stmt)
session.commit()

newstatus 是从当前选择集中获取的整数值在呈现给用户的下拉菜单中。在 session.commit() 上出现以下错误

   .....

File "C:\Python35\Python35-32\lib\site-packages\MySQLdb\connections.py", line 292, in query
_mysql.connection.query(self, query)
sqlalchemy.exc.OperationalError: (_mysql_exceptions.OperationalError) (1366, "Incorrect integer value: 'Patient' for column 'bill' at row 1") [SQL: 'UPDATE `order` SET bill=%s, ship=%s, status=%s, flavor=%s WHERE `order`.orderid = %s'] [parameters: ('Patient', 'Pickup', 'Received', 7, 100000)]

......
Process finished with exit code 1

执行的参数根本不是准备好的语句中显示的参数。它应该只更新 orderid 与作为函数参数提供的 orderid 以及下拉列表中的状态相匹配的行。

我已经更新了所有软件包并尝试了其他更新方法,包括 setattr(order, "status", newstatus)

我不确定如何诊断此错误。

编辑:我忘了之前提到,在先复制粘贴我的数据库声明脚本后,该函数实际上可以在 python 控制台中完美运行。

最佳答案

看来我已经回答了我自己的问题。我记得我在程序的前面查询了订单表,然后将其属性从整数更改为用户友好的字符串。当调用 update 时,它​​使用的是现在更改的订单对象,该对象的值与表列类型相矛盾。

我不知道 update 函数会尝试更新整个对象,而不仅仅是 .values() 字段中提供的列。因此,我不得不改进订单处理方式,而是将它们放入字典中并再次引用该表来更新原始订单。

关于python - 更新准备好的语句执行不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45315013/

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