Firebird 和 Python 中的多个 AND 运算符

问题描述

这是我正在尝试做的示例代码 - 能够在两个以上的输入框和分别在两个以上的数据库列中搜索用户输入:

cur.execute("""SELECT * 
FROM table
WHERE col1 LIKE ? AND col2 LIKE ? AND col3 LIKE ?;""",(
"%" + self.col1.get() + "%","%" + self.col2.get() + "%","%" + self.col3.get() + "%",))

records = cur.fetchall()
        # Fill TreeView
  print_records = ''
  for record in records:
    print_records += str(record) + "\n"
    self.tree.insert("",END,values=record)

conn.commit()
conn.close()

问题是此代码可以正常工作,直到我添加 AND col3 LIKE ? 之后显示的结果不正确。这是为什么?

解决方法

如果您希望“用户能够根据一个框中的条目进行搜索”,您必须在查询中使用 OR 而不是 AND。当前查询正在所有框中搜索条目。

,

所以我解决了这样的问题:总的来说,搜索功能在每次搜索中都有一个要填充的列。所以我在 python 中做了一些 IF 语句来读取那个框,并基于显示 SQL 查询结果的条目:

values = [self.col1.get(),self.col2.get(),self.col3.get()]

        if values != '':
            if values[1] or values[0] != '':
                cur.execute("""SELECT * FROM table WHERE col1 LIKE ? AND col2 LIKE ?;""",("%" + values[0] + "%","%" + values[1] + "%",))
            if values[2] != '':
                cur.execute("""SELECT * FROM table WHERE col3 LIKE ? AND col2 LIKE ?;""",("%" + values[2] + "%",))
        else:
            pass

代码有效并显示了我和用户正在尝试获取的结果。谢谢大家的帮助。