为什么不能在sql查询中插入python变量



我无法使用python变量将时间戳插入mysql(v8.0.27(数据库。(注意,我使用pymysql作为光标(。

以下代码按预期工作:

testQuery = f"""
INSERT INTO test_table_2(time, id) VALUES ('2020-05-23 05:30:10', 4);
"""
cursor.execute(testQuery)

但以下代码不起作用:

time = '2020-05-23 05:30:10'
testQuery = f"""
INSERT INTO test_table_2(time, id) VALUES ({time}, 4);
"""
cursor.execute(testQuery)

并给出以下错误

pymysql.err.ProgrammingError: (1064, "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 '05:30:10, 4)' at line 1")

(我知道使用f字符串对注入攻击不好,但我暂时不太关心这一点,因为我只是想让一些简单的东西发挥作用。然而,任何改进建议都是受欢迎的。我尝试过使用存储过程和其他方法的其他更复杂的方法,但这也不起作用。如果有人能帮助解决sto这个问题的红色过程版本:无法将带有存储过程的日期时间字段插入mysql数据库(

该表是使用以下模式创建的:

CREATE TABLE IF NOT EXISTS test_table_2 (
id INT, 
time TIMESTAMP,
PRIMARY KEY (time)
);

您忘记在{time}周围加引号,就像使用硬编码的时间戳一样。

但是不要使用字符串替换,而是使用一个带参数的已准备好的语句。

time = '2020-05-23 05:30:10'
testQuery = f"""
INSERT INTO test_table_2(time, id) VALUES (%s, 4);
"""
cursor.execute(testQuery, (time,))

最新更新