mysql 从python内部的数据库中删除记录时出错

shyt4zoc  于 2023-05-28  发布在  Mysql
关注(0)|答案(2)|浏览(154)

我试着删除我的数据库DB的Python内的记录,它给了我错误,

mysql.connector.errors.ProgrammingError: 1370 (42000): execute command denied to user 'user'@'%' for routine 'e7.get'

e7.get是tkinter中输入框的输入,我在mysql workbench中尝试了相同的命令,

DELETE FROM PATIENTS WHERE Patient_name=random_name

它在mysql工作台内部工作,唯一的问题是当我使用变量时,和一些特权错误?我使用的是一个在线免费托管网站db4free.net。我试过授予特权,它给出了另一个错误,即#1044 - Access denied for user 'user'@'%' to database 'DB'服务器确实支持远程访问。Thanks in advance:)编辑:我试着把e7.get()放在引号里,它不会给予错误,但它什么也没做,记录仍然存在。
产品编号:

def delete():
    con = mysql.connect(host='localhost', user='user', password='*****', database='DB')
    c = con.cursor()
    c.execute("DELETE FROM PATIENTS WHERE gender = 'e7.get()' ")
    c.execute('commit')
    con.close()
    e7.delete(0, END)

不显示错误,但不删除记录。

dpiehjr4

dpiehjr41#

即使是python也容易受到SQL注入的影响,因此使用参数化查询并避免python/sql转义的复杂性:

c.execute('DELETE FROM PATIENTS WHERE gender = %s', (e7.get()))

参见tutorial

dgiusagp

dgiusagp2#

这听起来像是在尝试将e7.get()的返回值插入到sql命令中。
在Python中,你可以用途:

c.execute(f"DELETE FROM PATIENTS WHERE gender = '{e7.get()}' ")

或者您可以用途:

c.execute("DELETE FROM PATIENTS WHERE gender = '{}' ".format(e7.get())

这两种方法都会将e7.get()的返回值插入到字符串中

相关问题