SELECT EXISTS 检查行是不是存在于另一个表中
Posted
技术标签:
【中文标题】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.result
insert()
上面的代码假设检查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 检查行是不是存在于另一个表中的主要内容,如果未能解决你的问题,请参考以下文章