gpt4 book ai didi

Python , MYSQL 数据库

转载 作者:可可西里 更新时间:2023-11-01 09:01:22 25 4
gpt4 key购买 nike

我有一张记录学生出勤情况的表格。该表有 4 列,一列用于学生 ID,另一列用于第 1 周、第 2 周和第 3 周(所有列都是整数)。通过在特定周仅输入 1(如果他缺席则为零)来记录出勤情况。我的问题在这里,当我想添加出勤时,我使用如下更新语句:

week_number=input('enter the week ( week1/week2/week3') 
id=int(input('enter student ID'))
sat="UPDATE Attendance2 SET %s=1 WHERE ID=%s "
cur.execute(sat, (week_number,id,))
conn.commit()

如您所见,我不知道用户将引用什么列(它是一个变量),所以我在 SET 后面使用了 %s,但这是错误的.

这里是错误:

mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''week1'=1 WHERE ID=300' at line 1

有什么帮助吗?如何在执行语句中写入变量列名称?

请注意,我只更新参加的学生,这就是为什么 UPDATE 语句中有 1

最佳答案

AFAICT,用引号将键括起来应该没问题。但是正如您所说的所有数据类型都是整数,您的值没有问题。

因为它说这是一个语法错误(而不是列问题,如果它没有找到 week1 它会大喊什么),这让我相信问题实际上是你的引述,它如果不是 mysql 的 SQL 语法所期望的,它确实会大喊语法问题。

mysql […] near ''week1'=1 WHERE ID=300' at line 1
^

是什么让 python 字符串被单引号包围?它是字符串的 repr() 版本,当您在 REPL 上键入字符串时得到的版本:

>>> x = '42'
>>> x
'42'
>>> print(repr(x))
'42'
>>> print(x)
42

我不确定为什么这个问题会发生在您身上。一个好主意是使用格式化字符串的 python 形式,然后运行:

sat="UPDATE Attendance2 SET {}=1 WHERE ID={}".format(week_number, id)

如果它仍然发生,您可以尝试使用 str(week_number)week_number 强制键入到 str() 中。

谈到格式化字符串,您可能想要强制输入,以避免意外:

sat="UPDATE Attendance2 SET {:s}=1 WHERE ID={:d}".format(str(week_number), int(id))

这将确保 week_number 是一个有效的字符串并被格式化为字符串,id 是一个有效的整数并被格式化为一个整数。

注意事项:避免在代码中使用 id,这是 python 保留关键字,而是使用 _ididentidx。避免隐藏全局 python 关键字始终是个好主意。

HTH

关于Python , MYSQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40965675/

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