所以我正在使用Python3.5.2VENV和SQLAlchemy和MySQL。我正在尝试更新表中订单(行)的状态。这只需要更改行中一列的值。下面显示了我正在使用的函数:
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
执行的参数根本不是prepared语句中显示的参数。它应该只更新orderid与作为参数提供给函数的orderid和下拉列表中的状态匹配的行。你知道吗
我已经更新了所有包,并尝试了其他更新方法,包括setattr(order, "status", newstatus)
我不确定如何诊断这个错误。你知道吗
EDIT:我忘了在前面提到,在复制粘贴数据库声明脚本之后,这个函数实际上在python控制台中可以完美地工作。你知道吗
看来我已经回答了我自己的问题。我记得我在程序的前面查询order表,然后将其属性从整数更改为用户友好的字符串。调用
update
时,它使用的是现在已更改的order对象,该对象的值与表列类型相矛盾。你知道吗我不知道
update
函数试图更新整个对象,而不仅仅是.values()
字段中提供的列。因此,我不得不改进对订单的处理,而是将它们放入字典中,并再次引用表以更新原始订单。你知道吗相关问题 更多 >
编程相关推荐