【问题标题】:Query is unable to match parts after "/" or parts within "()" in the data查询无法匹配数据中“/”后的部分或“()”内的部分
【发布时间】:2019-06-11 03:36:29
【问题描述】:

我有一个搜索请求写成

导入 sqlite3

conn = sqlite3.connect('locker_data.db')

c = conn.cursor()

def search1(teacher):
    test = 'SELECT Name FROM locker_data WHERE Name or Email LIKE "%{0}%"'.format(teacher)
    data1 = c.execute(test)
    return data1

def display1(data1):
    Display1 = []
    for Name in data1:
        temp1 = str(Name[0])
        Display1.append("Name: {0}".format(temp1))
    return Display1

def locker_searcher(teacher):
    data = display1(search1(teacher))
    return data

这使我可以使用搜索输入“FishyPower”来搜索包含“Mr FishyPower (Mr Swag)”或“Mr FishyPower / Mr Swag”的行。但是,当我尝试输入“Swag”进行搜索时,我无法找到同一行。

在下面的搜索中,它应该给了我相同的搜索结果。

该数据库只是一个简单的 1x1 sqlite3 数据库,其中包含“FishyPower / Mr Swag”

Search Error on 'Swag'

编辑:从技术上讲,我确实通过将要搜索的列限制为仅“名称”来解决它,但我希望代码同时搜索“名称”和“电子邮件”列并输出结果,只要在其中一个或两列。

Edit2: SELECT Name FROM locker_data WHERE Email LIKE "%{0}%" 或 Name LIKE "%{0}%" 是正确的方法。

【问题讨论】:

  • 以目前的形式,这个问题是无法回答的。没有迹象表明您正在使用什么 sqlite3 接口,并且 sql(如所写)不会返回所描述的任何一行。记住,MCVE
  • 明白了,我已经用更多细节更新了这个问题。最后包含搜索不工作的图片。
  • 我不认为“姓名或电子邮件之类的地方”是一个有效的条款。它可能应该是“名称之类的东西或电子邮件之类的东西”。
  • @Aioros Thx 伙计,这确实有效:v 我怎么没尝试过:v

标签: sqlite


【解决方案1】:

我猜 FishyPower 先生的电子邮件地址类似于 mrFishyPower@something.com。该查询仅将电子邮件与教师进行比较。如果是

WHERE Name LIKE "%{0}%"
OR Email LIKE "%{0}%"'

你会(可能)得到你想要的结果。

【讨论】:

    猜你喜欢
    • 2020-12-09
    • 2012-03-26
    • 2012-11-15
    • 2017-07-19
    • 2022-09-23
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多