目前,我有一个跟踪视图计数的SQLite数据库。它包含视图列,视频ID以及最后一次采样的时间戳。
目前,我正在使用(在Python中):
cursor.execute("INSERT INTO view_counts VALUES (?,?,?)", (views, id, time))
如果视图计数对于给定ID唯一,我该如何插入视频?
例如,如果前面的行是:
views id timestamp
200 5 60
300 5 70
我想仅在新观看次数超过300时插入视频。如果给定ID的观看次数仍为300,我不想插入。
请注意,我无法确保视图列是唯一的,因为具有不同ID的视频可能具有相同数量的视图。
感谢您的帮助!
答案 0 :(得分:2)
让数据库检查唯一性:
create table view_counts (
views,
id,
time,
unique(views,id)
)
通过这种方式,当视图和ID不唯一时,您会获得IntegrityError
。
答案 1 :(得分:1)
这可能不是最有效的方法,但我相信它会奏效。首先,选择包含所需ID的视频:
cursor.execute("SELECT * FROM view_counts WHERE id=?",(id))
然后,使用if语句检查值
while True:
row = cur.fetchone()
if row[0] > 300: #row[0] is the row your views should be in
cursor.execute("INSERT INTO view_counts VALUES (?,?,?)", (views, id, time))
break
就像我说的,这不是最好的方式。我的直觉告诉我,你可以单独做一些事情:
cursor.execute(UPDATE view_counts SET views=? WHERE views > ?", (views, old_views))
old_views
可能是传递的最后views
值(例如old_views = views
)
虽然这段代码可能无法完全解决您的问题,因为我的sqlite不是它的原因,但我希望它可以解决您的问题。如果您查看有关update query的更多信息,您可以修复我的略微猜测的工作代码。据我所知,SQLite3支持使用>
,但如果没有,那么开发一些东西(就像我在上面的例子中所做的那样)应该很容易获得当前视图的数量。