【问题标题】:Python SQLite3 query concatenating two valuesPython SQLite3查询连接两个值
【发布时间】:2023-04-09 06:47:01
【问题描述】:

我有一个包含一个表 (Students) 的数据库 (student.db)。
学生中的每一行都包含(ID、FName、LName)。
有一个现有行 (0, John, Doe)。

我希望能够输入一个变量作为全名,在数据库中找到该名称,然后删除该行。



这是我想出的……但它似乎不起作用:

import sqlite3    

conn = sqlite3.connect('student.db')
c = conn.cursor()

selection = "John Doe"

c.execute('DELETE FROM Students WHERE (FName + " " + LName =?', (selection,))

我没有收到错误消息。我猜那是因为它根本找不到任何匹配 WHERE 子句的条目。

有没有办法正确编写 WHERE 子句来合并感兴趣行中的多个值?

我对此很陌生,所以如果这是一个愚蠢的问题,我深表歉意。我正在尝试制作一个创建学生姓名 ListView 的 Kivy 应用程序。然后,您可以从列表中选择一个学生并单击“删除”以将该学生从 ListView 字典和数据库中删除。

【问题讨论】:

  • 好吧,这里超级简单的方法就是将John Doe 分成两部分,并在查询中使用AND。这会让你越过第一个障碍,但我认为这可能会在以后引起问题,因为名称很难使用(有些人有一个名字,有些人可能有 5 个,等等)。在您的示例中,“John Doe”的真正来源是什么?
  • 您希望将所选内容拆分为FName: JoeLName: Doe,然后在您的查询中使用它吗?
  • 我不想拆分的唯一原因是你的名字可能像“Mary Ann”这样的名字......这可能会导致问题。 “John Doe”这个名字来自 python 字典。该词典当前设置为全名列表。我确定可以修改字典,但我试图按照我为 Kivy youtu.be/dxXsZKmD3Kk?list=PLGLfVvz_LVvTn3cK5e6LjhgGiSeVlIRwt 找到的教程进行修饰

标签: python sqlite


【解决方案1】:

对于连接,大多数 SQL 实现使用“||”操作员。见SQLite docs

c.execute("DELETE FROM Students WHERE (FName || ' ' || LName = ?", (selection,))

【讨论】:

    【解决方案2】:

    Working with names is difficult 但我想我想多了你的问题。假设您只想查询两个字段,您可以将名称拆分为first_namelast_name,并从满足该组合的数据库中删除。

    selection = "John Doe"
    first_name, last_name = selection.split()
    
    query = """
            DELETE FROM Students 
            WHERE FName = ? AND LName = ?
            """
    
    c.execute(query, (first_name, last_name))
    conn.commit()
    

    【讨论】:

    • 我不想使用 selection.split() 的唯一原因是因为你可能有像“Mary Ann Robinson”这样的名字,而 Mary Ann 是“名字”
    • 在这种情况下,您希望查询如何处理这种情况?
    • @JED 您可以更轻松地存储这些数据。我应该等待我的评论得到答复。如果数据源是数据库本身(然后在屏幕上报告),那么这不是问题。
    • 我认为我需要接受这样一个事实,即我完全过度思考了这个教程视频,哈哈。但是,是的,如果这是为现实生活中的应用程序完成的,那么创建感兴趣的全名的方式应该不同。
    猜你喜欢
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 2012-03-29
    • 2014-11-07
    • 2016-05-27
    相关资源
    最近更新 更多