【问题标题】:Python + MySQL: Search function returning all entriesPython + MySQL:搜索功能返回所有条目
【发布时间】:2021-04-29 10:50:26
【问题描述】:

我正在使用 Python 和 MySQL 编写一个库存程序。我想实现一个搜索功能,它根据用户输入返回条目(在单独的 GUI 文件中编程)。在下面的代码中,我预计搜索功能会返回带有“UGreen”品牌的条目。相反,它会返回表中的所有条目。

我不确定我在这里做错了什么。我在另一个带有 sqlite 数据库的程序中使用了类似的结构,并且搜索工作正常。

任何和所有的帮助/建议将不胜感激:)

import mysql.connector

equipdb = mysql.connector.connect(
    host = "localhost",
    user = "root",
    password = "REDACTED",
    database = "tel_inventory"
)

def view():
    cur = equipdb.cursor()
    cur.execute("SELECT * FROM equipment")
    result = cur.fetchall()
    return result

def search(name="", brand="", model="", consumables="", storage="", room="", photo=""):
    cur = equipdb.cursor()
    cur.execute("SELECT * FROM equipment WHERE name=%s OR brand=%s OR model=%s OR consumables=%s OR storage=%s OR room=%s OR photo=%s", (name, brand, model, consumables, storage, room, photo))
    result = cur.fetchall()
    return result

#print(view())
print(search(brand="UGreen"))

【问题讨论】:

  • 您可能应该动态生成您的 where 子句(或使用为您执行此操作的 ORM)以仅包含您实际搜索的那些字段!

标签: python mysql search


【解决方案1】:

尝试直接使用关键字参数

def search(**kwargs):
    cur = equipdb.cursor()
    key = str(list(kwargs.keys())[0])
    value = str(kwargs[key])
    cur.execute('SELECT * FROM equipment WHERE {} = "{}"'.format(key,value))
    result = cur.fetchall()
    return result

【讨论】:

  • 嗯,确实做到了!太感谢了。现在我要弄清楚它为什么起作用了:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多