为什么不能将 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,))
我无法使用 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,))