我在循环中,尝试检查表中是否已存在特定条目-如果不是,我将其插入,如果已存在,则将对其进行更新。我尝试在fetchone()
之后进行c.execute(SELECT * )
,它总是返回None
,但是如果我尝试使用for result in c.execute(SELECT * )
进行迭代,则会得到预期的结果。
此迭代器有效,要么给我我希望找到的条目,而且我知道该条目在那里,要么完全跳过我所不知道的id_str
(在代码中使用此条目没有意义,因为该条目是唯一的,因此循环运行一次或永远不会运行,但我将其运行以进行测试):
for result in db_api.cursor().execute("SELECT * FROM fav_history WHERE tweet_id_str=?", (id_str,)):
#do stuff
但是,这个
db_api.cursor().execute("SELECT * FROM fav_history WHERE tweet_id_str=?", (id_str,))
result = db_api.cursor().fetchone()
if result is None:
#insert
else:
#update
result
始终为None
,即使我知道表中的id_str
也是如此。
我想念什么?如何以正确有效的方式进行检查?
答案 0 :(得分:1)
第二种情况下的问题是,当您实际访问结果集时正在生成一个新的游标。而是为光标定义一个变量,然后重用该变量:
cursor = db_api.cursor()
cursor.execute("SELECT * FROM fav_history WHERE tweet_id_str=?", (id_str,))
result = cursor.fetchone()
if result is None:
# insert
else:
# update