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

2024-10-03 06:19:04 发布

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

我尝试在python中为我的数据库nihaalnztrying删除一条记录,但它给了我一个错误

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

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

DELETE FROM PATIENTS WHERE Patient_name=nihaal 

它在mysql workbench内部工作,唯一的问题是当我使用变量时,出现了一些privilage错误?我使用在线免费托管网站db4free.net。我已尝试授予特权,但它给出另一个错误,#1044 - Access denied for user 'nihaalnz'@'%' to database 'nihaalnztrying'服务器不支持远程访问。提前感谢:) 编辑:我尝试将e7.get()放在引号中,但它没有给出错误,而且记录仍然存在

代码:

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

没有给出错误,但不删除记录


Tags: toforexecuteget错误记录mysqldelete
2条回答

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

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

tutorial

听起来好像您正试图将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()插入到字符串中

相关问题 更多 >