我在这个问题上遇到了很多麻烦,并且一直在检查堆栈溢出和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”列未知
通常,您不希望通过连接这样的变量来构建sql语句,而是使用参数化语句。
%s
是一个占位符,您需要变量数据(作为第二个参数传递给execute
:如果您绝对必须将变量数据用于表和列名,则可以(确保您完全知道该数据是什么),但继续将必须转义的数据作为参数传递:
^{pr2}$请参阅更多示例here。另外,如果要走第二条路线,请确保您理解potential downsides。在
相关问题 更多 >
编程相关推荐