sql = "SELECT * FROM attendance WHERE name="%s" val = (nameEnt) print(mycursor.execute(sql, val)) myresult = mycursor.fetchall() for x in myresult: print(x)

我想用python将'nameEnt'中的字符串传递到SQL查询中。我目前正在使用mysql-connector包。程序一直告诉我,我的语法是不正确的。我可以直接在SQL中执行查询,没有任何问题。

我也曾试过

sql = "SELECT * FROM attendance WHERE name= "+nameENt
    
3 个评论
你的"有问题......语法高亮会给你一个提示。;)试试。[替换代码1]。
如果你单独传递一个查询参数,你不需要在%s周围加引号。
python
mysql
sql
rdbms
eeshankeni
eeshankeni
发布于 2021-08-11
2 个回答
Danya02
Danya02
发布于 2021-08-14
0 人赞同

除非你知道自己在做什么,否则不要将SQL字符串与数据结合起来。这样做肯定会给自己带来麻烦。SQL注入漏洞.

你的原始代码几乎是正确的。首先,正如评论所指出的,你不需要在%s周围加上引号。

sql = "SELECT * FROM attendance WHERE name=%s"

然后,你的cursor.execute()的第二个参数是一个元组,但是在Python中,要做一个单元素的元组,用括号包住它是不够的。

my_element = 12345
not_a_tuple = (my_element)
type(not_a_tuple) == int
real_tuple = (my_element,)  # note the comma at the end
type(real_tuple) == tuple

将这些应用于你的代码,你会得到。

nameEnt = nameEntered.get()
print(nameEnt)
sql = "SELECT * FROM attendance WHERE name=%s"
val = (nameEnt,)
print(mycursor.execute(sql, val))
myresult = mycursor.fetchall()
for x in myresult:
    print(x)
    
JulianBPL
JulianBPL
发布于 2021-08-14
0 人赞同

你可以试试。