【问题标题】:MySQL seems to be changing the information given from PythonMySQL 似乎正在改变 Python 给出的信息
【发布时间】: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


【解决方案1】:

在 Python 中将 '' 放在花括号周围解决了该问题,因为 SQL 将输入视为数字并切断零。

【讨论】:

    猜你喜欢
    • 2023-03-21
    • 1970-01-01
    • 2019-06-14
    • 2023-03-11
    • 2022-08-13
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    • 2019-03-07
    相关资源
    最近更新 更多