0

尝试将日期时间插入 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)  
4

1 回答 1

1

不要使用字符串连接将值放入语句中。这很容易出错,并且可能使您的程序容易受到 SQL 注入攻击。使用参数。将您的程序代码更改为:

...
SET @queryStr = 'INSERT INTO test_table_2 (time) VALUES (?)';
PREPARE query FROM @queryStr;
EXECUTE query USING ptime;
DEALLOCATE PREPARE query;
...

?是一个参数占位符,它被替换为您传递USING时使用的表达式的值EXECUTE。这样就不需要关心转义、引用等,也不会做错。

于 2022-01-23T01:46:34.347 回答