我在试图将日期时间插入mysql数据库时遇到了这个语法错误。
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 '00:00:01)' at line 1")
我使用的是pymysql和flask mysql。这是我的代码:
cursor.execute("""DROP TABLE IF EXISTS test_table_2;""")
cursor.execute("""DROP PROCEDURE IF EXISTS updateTestProc2;""")
testTable = """CREATE TABLE IF NOT EXISTS test_table_2 (
time DATETIME,
PRIMARY KEY (time)
);
"""
testProc = """
CREATE PROCEDURE updateTestProc2(
IN ptime DATETIME
)
BEGIN
SET @queryStr = CONCAT('INSERT INTO test_table_2(time) VALUES ( ',
ptime,
')
;'
);
PREPARE query FROM @queryStr;
EXECUTE query;
DEALLOCATE PREPARE query;
END
"""
cursor.execute(testTable)
cursor.execute(testProc)
proc_input = ('1990-05-23 00:00:01',)
cursor.callproc('updateTestProc2', proc_input)
不要使用字符串串联将值获取到语句中。这很容易出错,可能会使您的程序容易受到SQL注入攻击。使用参数。将您的程序代码更改为:
...
SET @queryStr = 'INSERT INTO test_table_2 (time) VALUES (?)';
PREPARE query FROM @queryStr;
EXECUTE query USING ptime;
DEALLOCATE PREPARE query;
...
?
是一个参数占位符,在执行EXECUTE
时,它将替换为使用USING
传递的表达式的值。这样就不需要在意逃避、引用等,也不会出错。