从Python插入MySQL查询的语法无效
尝试执行以下操作时:从Python插入MySQL查询的语法无效,python,mysql-python,Python,Mysql Python,尝试执行以下操作时: def postToMySQL(date,data,date_column_name,data_column_name,table): cursor = conn.cursor () sql = "\"\"\"INSERT INTO " + table + " (" + date_column_name + ", " + data_column_name + ") VALUES(%s, %s)" + "\"\"\"" #+ ", " + "(" + date + ",
def postToMySQL(date,data,date_column_name,data_column_name,table):
cursor = conn.cursor ()
sql = "\"\"\"INSERT INTO " + table + " (" + date_column_name + ", " + data_column_name + ") VALUES(%s, %s)" + "\"\"\"" #+ ", " + "(" + date + ", " + data + ")"
cursor.execute(sql,(date,data))
我得到这个错误:
_mysql_exceptions.ProgrammingError:(1064,'您的SQL语法有错误…靠近:
\'''在natgas(英国日期)值中插入(\'2012-05-01 13:00:34\',\'59.900\')“\'在第1行”
我对语法错误的地方感到困惑,因为下面的硬编码示例很好:
def postUKnatgastoMySQL(date, UKnatgas):
cursor = conn.cursor ()
cursor.execute("""INSERT INTO natgas (Date, UK)VALUES(%s, %s)""", (date, UKnatgas))
你能发现错误吗
或者,您能告诉我如何将参数传递给字段列表和值列表吗
非常感谢
\“插入natgas(英国日期)值(\'2012-05-01 13:00:34\”,
\“59.900\”)“第1行的“\”)
这显然不是vlaidsql命令。你需要把反斜杠弄出来,你可能在逃避不该逃避的东西
例如,三重引号是不必要的。这些三重引号是python中表示字符串的一种方式。它们不应该是实际查询的一部分
另一方面,一定要相信这种方法的输入。查找
SQL注入
谢谢您的回答。我试图将其复制为字符串>“插入natgas(Date,UK)值(%s,%s)”<,然后将其传递给cursor.execute。为此,我必须转义三个“”,否则python会认为我正在关闭字符串。三个引号不应该是查询的一部分,它们是python语法。此外,您似乎还转义了值中的单引号。请尝试删除所有反斜杠…不幸的是,当我删除斜杠时,我只得到一个块引号:“”“插入到“+table+”(“+date\u column\u name+”,“+data\u column\u name+”)值(%s,%s)”+”,python无法识别字符串中是否存在变量。感谢Weasel,使其正常工作。三重引号真的没必要。啊,太棒了!下面的代码现在可以使用了:sql=“INSERT INTO”+table+(“+date\u column\u name+”,“+data\u column\u name+”)值(%s,%s)”我听说过一些关于sql注入的内容。我还没有什么有价值的东西,但是有没有一个简单的替代方法呢?