繁体   English   中英

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

[英]Insert a value into a database only if one column is unique for a given ID

目前,我有一个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的视频可能具有相同的观看次数。

谢谢你的帮助!

让数据库检查唯一性:

create table view_counts (
    views,
    id,
    time,
    unique(views,id)
) 

这样,当视图和id不唯一时,您将收到IntegrityError

这可能不是执行此操作的最有效方法,但我相信它会起作用。 首先,选择具有所需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并非如此,但我希望它能以某种方式解决您的问题。 如果您查找有关更新查询的更多信息,您也许可以修复我稍有猜测的工作代码。 据我所记得,SQLite3支持>的使用,但是如果不是这样,那么开发能够获取当前视图计数的东西(就像我在上面的示例中所做的那样)应该很容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM