Python中的SQLite 3中的链接表

问题描述:

我必须创建一个程序,它将人们的帐户详细信息存储在SQLite 3的表中。其中一列是兴趣,这是用户最喜欢的电影流派。然后我需要给他们基于那种流派的电影推荐,所以我需要另一张存放这种流派电影的桌子。唯一的问题是,我不知道如何链接表,所以当喜剧是他们最喜欢的流派,如何在流派喜剧中输出电影。Python中的SQLite 3中的链接表

这里是我添加新用户代码:

#function for creating a new customer's account 
def create_id(username, password, name, address, DoB, gender, interestsUp, recent1, recent2, recent3, recent4, recent5, recent6, recent7, recent8, recent9, recent10): 
    #When adding something to a SQLite file, you have to put "" around each item 
    c.execute('INSERT INTO userId(username,password,name,address,DoB,gender,interests, recent1, recent2, recent3, recent4, recent5, recent6, recent7, recent8, recent9, recent10) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', (username, password, name, address, DoB, gender, interestsUp, recent1, recent2, recent3, recent4, recent5, recent6, recent7, recent8, recent9, recent10))#When adding something thats in a variable you put question marks and the name of the variables in brackets 
    conn.commit() 
+0

如果您显示了一些说明您尝试过的代码,您可能会收到更多具体的答案以帮助您。你熟悉SQL吗?你有正确的想法 - 另一张包含电影标题的表是好的。根据您的需求,您可能还应该有一个适用于流派的单独表格。所以你可能会有“电影”和“流派”表。这样,您可以将与“喜剧”相匹配的流派索引存储在用户表中的“兴趣”下。而且你会查询“电影”表,为用户提供与他们的流派选择相匹配的电影列表。 –

+0

@RonNorris我知道我必须使用外键,我只是不知道如何做到这一点。 –

+0

你需要一个连接 - http://www.sqlitetutorial.net/sqlite-inner-join/ – Alan

你不应该尝试将所有数据存储在一个表中。您应该为每个主题(例如用户详细信息,兴趣)使用表格,然后表达表格之间的关系。您可以在设计时使用外键来完成此操作,这将有助于保持数据清洁,但在抽取数据时还需要定义关系。

下面是一个例子:

表1:用户
USER_ID,用户名

表2:User_Details
USER_ID,密码,名称,地址,出生日期,性别

表3:收藏
fav_id,user_id,流派

表4:电影
然后 film_id,film_name,流派

要获得用户的首选风格的名单将是:

​​

几乎被INNER JOIN这里所有的过滤完成。这将连接表,但只返回两个表中都存在的结果。这意味着如果用户尚未提交任何偏好设置,则不会为该用户返回任何结果。 ON指令告诉数据库这个关系是什么。

输出结果将是与用户喜欢的任何类型相关的电影列表。