Python3Mysql.connector如何删除用户名=变量的行?

2024-06-26 14:42:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我在这个问题上遇到了很多麻烦,并且一直在检查堆栈溢出和web上的所有问题,以寻找答案。我试图在这个语句中替换一个变量(“DELETE FROM where USERNAME=”+[variable])

这是我的代码:

import mysql.connector as mysql

global usr_to_rmv
usr_to_rmv = 'Hoyt'

global from_table
from_table = "accounts"

global from_db
from_db = "users"

global from_column
from_column = "username"

cnx = mysql.connect(user = 'root', password = 'mag1c1234',
                      host = 'localhost',
                      database = from_db)

cursor = cnx.cursor()

# Uncomment to reset new data to 1
cursor.execute("ALTER TABLE accounts AUTO_INCREMENT = 1")

removeuser = ("DELETE FROM" + " " + from_table + " " + "WHERE" + " " + from_column + "=" + usr_to_rmv);

cursor.execute(removeuser)

query_1 = ("SELECT * FROM accounts");
cursor.execute(query_1)

for row in cursor.fetchall():
  print(row)

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

感谢大家的帮助。谢谢:)

编辑:这就是我遇到的错误mysql.connector.errors.ProgrammingError:1054(42S22):“where子句”中的“Hoyt”列未知


Tags: tofromexecutedbusrmysqltablecolumn
1条回答
网友
1楼 · 发布于 2024-06-26 14:42:05

通常,您不希望通过连接这样的变量来构建sql语句,而是使用参数化语句。%s是一个占位符,您需要变量数据(作为第二个参数传递给execute

sql_delete = "DELETE FROM accounts WHERE username = %s"
sql_data = (usr_to_remove,)

cursor.execute(sql_delete, sql_data)

如果您绝对必须将变量数据用于表和列名,则可以(确保您完全知道该数据是什么),但继续将必须转义的数据作为参数传递:

^{pr2}$

请参阅更多示例here。另外,如果要走第二条路线,请确保您理解potential downsides。在

相关问题 更多 >