【发布时间】:2018-01-05 17:12:23
【问题描述】:
我正在使用 MySQLdb Python 包连接到数据库,并且我的表中的某些字段确实更新正确,但其中许多似乎默认为某个值。我正在使用一个名为“submit_results”的存储过程,它会导致一个更新过程,该过程通过使用考试编号作为索引来更新学生的分数。
cursor.execute("call s4u155_examcorrector.submit_results({},{},{});".format(str(exam_number),str(marks),str(markedstring)))
我让 Python 输出为问题(用于调试)给出的考试编号和分数。如您所见,考试编号 7 得到 0222202222(这是一个字符串/varchar)
Exam Number: 7
Marks: 0222202222
另一方面,MySQL 表输出:
7
222202222
任何想法以及为什么会发生这种情况?提前谢谢您。
编辑:标记是 Varchar(100)
【问题讨论】:
-
在您对
.format()的调用中执行str(marks)之前,marks的类型是什么?存储过程s4u155_examcorrector.submit_result的代码是什么?什么代码产生了 Python 调试输出?什么代码产生了 MySQL 输出? -
marks 是字符串之前的浮点数,而标记字符串已经是字符串,标记字符串是问题发生的地方。在 python 中产生输出的代码就是
print(exam_number) print(markedstring)。我无法获取存储过程,因为我在此服务器上没有读取它们的权限,尽管它在大多数情况下都可以工作。 -
您的存储过程需要什么数据类型?您正在传递不带单引号的字符串参数,这意味着它们将作为数字数据传递。
-
它需要一个 varchar,但我会改为单引号,谢谢
-
另外,the docs show 应该以不同的方式调用存储过程。它应该类似于
cursor.callproc('s4u155_examcorrector.submit_results', [exam_number, marks, markedstring])。按照自己的方式进行操作,您仍然需要在字符串参数cursor.execute("call s4u155_examcorrector.submit_results('{}',{},'{}');".format(str(exam_number),str(marks),str(markedstring)))周围加上单引号。
标签: python mysql mysql-python