为什么不能将 python 变量插入到 sql 查询中?

why cannot insert python variable into sql query?

我无法使用 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-strings 不利于注入攻击,但我暂时不太关心它,因为我只是想让一些简单的工作。但是任何改进建议也欢迎。我尝试过使用存储过程和其他方法的其他更复杂的方法,但这也不起作用。如果有人可以帮助解决此问题的存储过程版本,请在此处放置 post:cannot insert datetime field with stored procedure into mysql database )

table 是使用以下架构创建的:

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

您忘记在 {time} 周围加上引号,就像您对 hard-coded 时间戳所做的那样。

但不要使用字符串替换,使用带参数的准备语句。

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