You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

SQLite数据检索问题:修正输入框查询数据的SQL语句

修正检索功能的SQL语句问题

你的show()函数里的SQL查询语句犯了一个典型的语法错误——把INSERT语句的VALUES语法错误地套用到了SELECT查询上。查询数据需要用WHERE子句来指定匹配条件,而不是VALUES

问题分析

你当前的错误SQL语句:

SELECT * FROM people(name, phone) VALUES(?,?)

这完全不符合SELECT的语法规范,正确的查询逻辑应该是从people表中选取符合输入条件的记录,通过WHERE子句来匹配你输入的姓名和手机号。

修正后的show()函数

根据你的需求(输入已存储的数据检索对应记录),这里分两种常见场景给出修正代码:

场景1:同时匹配姓名和手机号(精确匹配)

如果你需要同时输入姓名和手机号,只返回完全匹配这两个条件的记录:

def show(): 
    name1 = textin.get() 
    phone1 = textinn.get() 
    conn = sqlite3.connect(r'D:\lastfm-dataset-360K\msd.sqlite3')  # 用raw字符串避免路径转义问题
    with conn: 
        cursor = conn.cursor() 
        # 正确的SELECT语句:用WHERE匹配字段值
        cursor.execute('SELECT * FROM people WHERE name = ? AND phone = ?', (name1, phone1)) 
        rows = cursor.fetchall()
        if rows:
            for row in rows: 
                print(row) 
        else:
            print("没有找到匹配的记录")
    # with块结束后连接会自动关闭,无需额外调用close()

场景2:单独匹配姓名或手机号(灵活检索)

如果你希望可以输入其中一个字段(比如只输姓名,不管手机号)来检索,可以根据输入内容动态调整查询条件:

def show(): 
    name1 = textin.get().strip() 
    phone1 = textinn.get().strip() 
    conn = sqlite3.connect(r'D:\lastfm-dataset-360K\msd.sqlite3') 
    with conn: 
        cursor = conn.cursor() 
        # 根据输入内容生成对应查询逻辑
        if name1 and phone1:
            cursor.execute('SELECT * FROM people WHERE name = ? AND phone = ?', (name1, phone1))
        elif name1:
            cursor.execute('SELECT * FROM people WHERE name = ?', (name1,))
        elif phone1:
            cursor.execute('SELECT * FROM people WHERE phone = ?', (phone1,))
        else:
            print("请输入姓名或手机号进行检索")
            return
        
        rows = cursor.fetchall()
        if rows:
            for row in rows: 
                print(row) 
        else:
            print("没有找到匹配的记录")

额外注意事项

  1. 路径转义问题:你的数据库路径用了\,建议加上r前缀变成raw字符串(r'D:\lastfm-dataset-360K\msd.sqlite3'),避免转义字符引发的路径解析错误。
  2. 连接关闭问题:在insert()函数里,你用了with conn:块,这个块结束后会自动关闭数据库连接,所以后面的db.close()是多余的,而且db并没有被定义,会引发NameError,建议删除这一行。

内容的提问来源于stack exchange,提问作者T.Gilmour

火山引擎 最新活动