仅当一列对于给定ID是唯一的时,才将值插入数据库

时间:2014-05-08 16:59:24

标签: python sql python-2.7 sqlite

目前,我有一个跟踪视图计数的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的视频可能具有相同数量的视图。

感谢您的帮助!

2 个答案:

答案 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支持使用>,但如果没有,那么开发一些东西(就像我在上面的例子中所做的那样)应该很容易获得当前视图的数量。