[英]Update select row in MySQL with Python
我正在編寫一個代碼,它首先查詢 MySQL 表,找到一個沒有分配給用戶的電話號碼,並用用戶指定的新用戶更新它。 這是我的代碼:
import mysql.connector
mydb = mysql.connector.connect(
host="127.0.0.1",
user="root",
password="password",
database="DID_MASTER"
)
mycursor = mydb.cursor()
mycursor.execute("SELECT DID FROM JAX2 WHERE ASSIGNEE = ''")
myresult = mycursor.fetchall()
location = input("Enter users location: :")
name = input('Enter users name: ')
for x in myresult:
print('Free number to be used: ', x)
sql = "UPDATE JAX2 SET ASSIGNEE = %s WHERE DID = %s"
val = (name, x)
mycursor.executemany(sql, val)
mydb.commit()
break
查詢工作正常,但問題在於更新部分。 它返回以下錯誤:
Enter users name: Joe Smith
Free number to be used: (1235136500,)
Traceback (most recent call last):
File "/Users/user1/Desktop/old mac Desktop/DID Project/DB_Testing.py", line 27, in <module>
mycursor.executemany(sql, val)
File "/Users/user1/Library/Python/3.9/lib/python/site-packages/mysql/connector/cursor_cext.py", line 406, in executemany
self.execute(operation, params)
File "/Users/user1/Library/Python/3.9/lib/python/site-packages/mysql/connector/cursor_cext.py", line 266, in execute
prepared = self._cnx.prepare_for_mysql(params)
File "/Users/user1/Library/Python/3.9/lib/python/site-packages/mysql/connector/connection_cext.py", line 738, in prepare_for_mysql
raise ProgrammingError(
mysql.connector.errors.ProgrammingError: Could not process parameters: str(Joe Smith), it must be of type list, tuple or dict
更新錯誤:
raceback (most recent call last):
File "/Users/nbecirovic/Desktop/old mac Desktop/DID Project/DB_Testing.py", line 27, in <module>
mycursor.executemany(sql, val)
File "/Users/nbecirovic/Library/Python/3.9/lib/python/site-packages/mysql/connector/cursor_cext.py", line 406, in executemany
self.execute(operation, params)
File "/Users/nbecirovic/Library/Python/3.9/lib/python/site-packages/mysql/connector/cursor_cext.py", line 266, in execute
prepared = self._cnx.prepare_for_mysql(params)
File "/Users/nbecirovic/Library/Python/3.9/lib/python/site-packages/mysql/connector/connection_cext.py", line 726, in prepare_for_mysql
result = self._cmysql.convert_to_mysql(*params)
_mysql_connector.MySQLInterfaceError: Python type tuple cannot be converted
似乎您將 x 直接傳遞給更新查詢,但 x 是一個元組,因此您必須獲取第一個元素,然后將其添加到 SQL 更新查詢。
正如@lucas-fernandes回答的那樣,你必須使用帶有executemany
的列表
sql = "UPDATE JAX2 SET ASSIGNEE = %s WHERE DID = %s"
did = x[0]
val = [(name, did)]
mycursor.executemany(sql, val)
mydb.commit()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.