[英]MySQL Connector could not process parameters
I'm trying to loop through an array and insert each element into a table.我试图遍历一个数组并将每个元素插入到一个表中。 As far as I can see my syntax is correct and I took this code straight from Microsoft Azure's documentation .
据我所知,我的语法是正确的,而且我直接从Microsoft Azure 的文档中获取了这段代码。
try:
conn = mysql.connector.connect(**config)
print("Connection established")
except mysql.connector.Error as err:
if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
print("Something is wrong with the user name or password")
elif err.errno == errorcode.ER_BAD_DB_ERROR:
print("Database does not exist")
else:
print(err)
else:
cursor = conn.cursor()
data = ['1','2','3','4','5']
for x in data:
cursor.execute("INSERT INTO test (serial) VALUES (%s)",(x))
print("Inserted",cursor.rowcount,"row(s) of data.")
conn.commit()
cursor.close()
conn.close()
print("Done.")
When I run this is gets to cursor.execute(...)
and then fails.当我运行时,它会到达
cursor.execute(...)
然后失败。 Here is the stack trace.这是堆栈跟踪。
Traceback (most recent call last): File "test.py", line 29, in cursor.execute("INSERT INTO test (serial) VALUES (%s)",("test")) File "C:\Users\AlexJ\AppData\Local\Programs\Python\Python37\lib\site-packages\mysql\connector\cursor_cext.py", line 248, in execute prepared = self._cnx.prepare_for_mysql(params) File "C:\Users\AlexJ\AppData\Local\Programs\Python\Python37\lib\site-packages\mysql\connector\connection_cext.py", line 538, in prepare_for_mysql raise ValueError("Could not process parameters") ValueError: Could not process parameters
回溯(最近调用最后):文件“test.py”,第 29 行,在 cursor.execute(“插入测试(串行)值(%s)”,(“测试”))文件“C:\Users\ AlexJ\AppData\Local\Programs\Python\Python37\lib\site-packages\mysql\connector\cursor_cext.py”,第248行,在execute prepared = self._cnx.prepare_for_mysql(params) File "C:\Users\AlexJ \AppData\Local\Programs\Python\Python37\lib\site-packages\mysql\connector\connection_cext.py",第 538 行,在 prepare_for_mysql 中 raise ValueError("Could not process parameters") ValueError: Could not process parameters
Try this:尝试这个:
for x in data:
value = "test"
query = "INSERT INTO test (serial) VALUES (%s)"
cursor.execute(query,(value,))
print("Inserted",cursor.rowcount,"row(s) of data.")
Since you are using mysql module, cursor.execute
requires a sql query and a tuple as parameters由于您使用的是 mysql 模块,因此
cursor.execute
需要一个 sql 查询和一个元组作为参数
Nice answer from @lucas, but maybe this help other, cz i think more cleaner @lucas 的回答不错,但也许这对其他人有帮助,因为我认为更清洁
sql = "INSERT INTO your_db (your_table) VALUES (%s)"
val = [("data could be array")]
cursor = cnx.cursor()
cursor.execute(sql, val)
print("Inserted",cursor.rowcount,"row(s) of data.")
cnx.commit()
cnx.close()
Cz this is useful for my purpose, to input multiple data. Cz 这对我的目的很有用,可以输入多个数据。
I'm facing same issue but instead of array, I'm looping through a set and insert each item into mysql db and got this error mysql.connector.errors.ProgrammingError: Could not process parameters: str(Data_Tokens), it must be of type list, tuple or dict
.我面临同样的问题,但不是数组,而是循环遍历一组并将每个项目插入 mysql db 并收到此错误
mysql.connector.errors.ProgrammingError: Could not process parameters: str(Data_Tokens), it must be of type list, tuple or dict
。
The uniqueTokenSet includes string data type, but as error shows that it must be list, tuple or dict. uniqueTokenSet 包含字符串数据类型,但错误显示它必须是列表、元组或字典。 By converting
item
to list of tuple [(item)]
work for me.通过将
item
转换为元组列表[(item)]
为我工作。
uniqueTokenSet = set()
for item in uniqueTokenSet:
tokenSql = "insert into tokens(token) values (%s)"
data = [(item)]
mycursor.execute(tokenSql, data)
print('data inserted')
mydb.commit()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.