【问题标题】:How can I delete a record using MySQL in Python?如何在 Python 中使用 MySQL 删除记录?
【发布时间】:2017-03-04 10:54:23
【问题描述】:

我有一个名为 Students 的数据库表,我想使用 SQL 删除一条记录。这是我的代码:

uid = int(input("Please enter students ID: "))
c.execute("DELETE FROM Students WHERE ID = (uid) ")

我想将ID 变量(uid)输入到c.execute

提前致谢。

【问题讨论】:

  • 我猜你在找:c.execute("DELETE FROM Students WHERE ID = {} ".format(uid))
  • @JustRufus 请记住,此示例暴露于 SQL 注入。
  • 它不是,因为它是 int……你不能用 int 注入任何代码。

标签: python mysql database


【解决方案1】:

您不得使用其他答案中推荐的字符串插值;虽然在这种特定情况下它可能没问题,但通常它是不安全的,因为它会打开 SQL 注入。相反,在execute 方法中使用对参数的支持:

uid = int(input("Please enter students ID: "))
c.execute("DELETE FROM Students WHERE ID = %s", (uid,))

【讨论】:

    【解决方案2】:

    Daniel Roseman 所说的应该是正确答案。

    您可以将 ID 作为 .execute 方法的参数插入。关于这个here有答案

    【讨论】:

      【解决方案3】:

      基本上语法是:

      "some string: %s, some int: %i, some double: %d" % (string_var,int_var,double_var)
      

      所以:

      uid = int(input("Please enter students ID: "))
      c.execute("DELETE FROM Students WHERE ID = %i" % (uid))
      

      【讨论】:

      • 此代码暴露于 SQL 注入。 OP 应该使用参数化查询。
      • 不是真的...它是 int...不易受攻击的。
      • 明天 OP 将尝试以同样的方式使用字符串。
      • 也许,但是这段代码很好。给-1是因为我不同意你的观点?哦,好的。
      • 什么?我不明白你怎么能这么说。这个问题完全是关于如何将变量插入到数据库调用中。毫无疑问,使用字符串格式来做到这一点是不安全,这就是为什么数据库 API 提供了一种安全的支持方式来做到这一点。
      猜你喜欢
      • 1970-01-01
      • 2012-12-15
      • 2021-02-05
      • 1970-01-01
      • 2021-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多