mysql.connector.errors.ProgrammingError:1064(4200):您的SQL语法有错误;

时间:2017-08-13 23:41:14

标签: python mysql

我正在尝试将数据插入MySQL数据库。我正在使用python 2.7,我正在使用mysql.connector。

我的错误是:

  

mysql.connector.errors.ProgrammingError:1064(4200):你有一个   SQL语法错误;查看与您的MySQL服务器版本对应的手册,以便在第1行的'%s附近'使用正确的语法。

这表示我的代码中出现错误,我尝试插入变量np(VALUES(%s)“);)。np是一个”名词短语“,例如”滑板“。

import mysql.connector
from textblob import TextBlob

cnx = mysql.connector.connect(user='XXX', password='XXX',
                              host='XXXXX',
                              database='XXXX')

cursor = cnx.cursor(buffered=True)

Latest = ("SELECT * FROM SentAnalysis")
cursor.execute(Latest)

for row in cursor.fetchall():
    SentText = row[2]
    blob = TextBlob(SentText)
    for np in blob.noun_phrases:
        print(np)
        SQLInsertCmd = ("INSERT INTO TestNounPhrase (NPhrase) VALUES (%s)")
        cursor.execute(SQLInsertCmd,np)

cnx.commit()
cursor.close()
cnx.close()

手册中的示例是https://dev.mysql.com/doc/connector-python/en/connector-python-example-cursor-transaction.html。 e.g。

 "VALUES (%s, %s, %s, %s, %s)")

我看不出有什么区别。此错误也在此处详细讨论:How can I fix MySQL error #1064? stackoverflow上的其他类似示例已链接到reserved wordsRedundant comas。但是看看这些示例,我无法发现明显的错误。

对于我出错的地方的任何建议都将不胜感激。

7 个答案:

答案 0 :(得分:2)

SQL查询中的

str参数必须在引号'str'中。
因此,需要将'%s'和''用作str,将%s不将''用作数字:

cursor.execute("""INSERT INTO db_name (str,int,str,int)
                  VALUES ('%s', %s, '%s', %s)""" % (str,int,str,int))
cnx.commit()

答案 1 :(得分:1)

试试这个

SQLInsertCmd = """INSERT INTO
                  TestNounPhrase (NPhrase) VALUES ((%s))"""  % (np)
cursor.execute(SQLInsertCmd)

答案 2 :(得分:1)

我认为这里的问题可能是查询末尾的分号。

祝你有美好的一天。

答案 3 :(得分:0)

您必须转换包含要插入到“ 完整元组”中的值的元组。 例如:

for np in blob.noun_phrases:
        np=(np,)

在一个通用示例中,如果仅要插入一列,则为:

to_insert=('A value to insert',)

最后,如果您一次要插入多个值:

to_insert_multiple=[('value1',), ('value2',), ('valueN',)]

我希望它会有所帮助,它在 py3.7

中对我有用

答案 4 :(得分:0)

我对单参数语句有相同的问题,这可行:

mycursor.execute("INSERT INTO cust (user) VALUES(%s)" % (username))

答案 5 :(得分:0)

我遇到了同样的错误,在寻找解决方案的过程中,我经过几次尝试就解决了这个问题。该错误是WHERE语句的UPDATE子句中列名的键入错误。我的列名为“ ROLL_NO”,而不是键入“ ROLL_NO”。 请注意这一点。

答案 6 :(得分:-2)

mycursor.execute(“插入表名(列)值(%s)”%data_variable)