我正在尝试将数据插入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 words,Redundant comas。但是看看这些示例,我无法发现明显的错误。
对于我出错的地方的任何建议都将不胜感激。
答案 0 :(得分:2)
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)