指点成金-最美分享吧

登录

SELECT EXISTS 检查行是不是存在于另一个表中

佚名 举报

技术标签:

【中文标题】SELECT EXISTS 检查行是不是存在于另一个表中【英文标题】:SELECT EXISTS to check if row exists in another tableSELECT EXISTS 检查行是否存在于另一个表中 【发布时间】:2021-08-26 21:16:32 【问题描述】:

我正在尝试使用SELECT EXISTS 根据电子邮件列查找任何匹配的行。起初我通过它是有效的,但后来我注意到无论我做什么它都会给我同样的结果。

代码如下:

def insert():    time.sleep(5)    email = "fakeemailgunicornalltestf@fakemail.com"    company = "Conglomo"    typeemail = "whitelist"    try:            connecttosql = sqlite3.connect("database/spamdatabase.db")        connectioncursor = connecttosql.cursor()        connectioncursor.execute("SELECT EXISTS(SELECT 1 FROM loggedemails WHERE email = ?)", (email,))        # print(connectioncursor.fetchone())        if connectioncursor.fetchone():            alreadyprocessed = "This has been already processed. This is was an error you may want to reverse this action. (Feature coming soon)"            print(alreadyprocessed)            return alreadyprocessed        else:                        sql_insertval = """INSERT INTO heldforreview (email, company, type)                                VALUES(?,?,?)                                CHECK ;"""            sowreqeust = (email,company,typeemail)            connectioncursor.execute(sql_insertval, sowreqeust)            connecttosql.commit()             insert.result = "SUCCESS"    except Exception as Argument:        print("Email is added to database error: "+str(Argument))        insert.result = "FAILED"        print(insert.result)        return insert.result    print(insert.result)    return insert.resultinsert()

上面的代码假设检查loggedemails 列是否已经添加了fakeemailgunicornalltestf@fakemail.com。但是它说它已经被添加了,即使它还没有被故意添加。

有什么建议吗?

谢谢大家!

【问题讨论】:

那部分代码很乱,不应该在这里发布。我只是在测试一堆东西来让它工作。代码已更新。我从这个堆栈溢出帖子中得到了 SELECT EXISTS 的想法:我从这个堆栈溢出帖子中得到了这个想法:***.com/a/18817754 很抱歉造成混乱。 @khelwood 我认为您应该打印 fetchone() 并查看它返回的内容。如果它返回一个非空元组,那么if connectioncursor.fetchone(): 将成功:这并不意味着它在您的数据库中找到了电子邮件。 当我尝试print(connectioncursor.fetchone())时,它给了我(0,)的结果我应该尝试if connectioncursor.fetchone()=="(1,)": 【参考方案1】:

如果您的 SELECT EXISTS 查询找到您要查找的行,则 fetchone 将返回一个包含 1(表示 true)的元组。

如果没有找到该行,则fetchone 将返回一个包含 0(表示 false)的元组。

在任何一种情况下if connectioncursor.fetchone(): 都会成功,因为非空元组是真实的,无论它包含什么。

您可以通过将条件更改为以下方式来修复它:

if connectioncursor.fetchone()[0]:

if connectioncursor.fetchone()==(1,):

【讨论】:

if connectioncursor.fetchone()[0]: 完全成功了!谢谢你帮我解决这个问题。

以上是关于SELECT EXISTS 检查行是不是存在于另一个表中的主要内容,如果未能解决你的问题,请参考以下文章