所以我在使用SQLAlchemy和MySQL的Python 3.5.2版本中工作。我试图更新表格中订单(行)的状态。这只需要更改一行中一列的值。以下显示我正在使用的功能:
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控制台中实际上可以正常工作。答案 0 :(得分:0)
似乎我已经回答了我自己的问题。我记得我之前在程序中查询了订单表,然后将其属性从整数更改为用户友好的字符串。当调用update
时,它使用的是现在更改的订单对象,其值与表列类型相矛盾。
我不知道update
函数会尝试更新整个对象,而不仅仅是.values()
字段中提供的列。因此,我不得不改进我对订单的处理,而是将它们放入字典并再次引用该表来更新原始订单。