【发布时间】: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 的想法:我从这个堆栈溢出帖子中得到了这个想法:stackoverflow.com/a/18817754 很抱歉造成混乱。 @khelwood
-
我认为您应该打印
fetchone()并查看它返回的内容。如果它返回一个非空元组,那么if connectioncursor.fetchone():将成功:这并不意味着它在您的数据库中找到了电子邮件。 -
当我尝试
print(connectioncursor.fetchone())时,它给了我(0,)的结果我应该尝试if connectioncursor.fetchone()=="(1,)":