简体   繁体   English

MySQL 连接器无法处理参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM