我必须创建一个程序,将人们的帐户详细信息存储在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 :(得分:1)
您不应尝试将所有数据存储在一个表中。您应该为每个主题使用一个表(例如用户详细信息,兴趣),然后表达表之间的关系。您可以在设计时使用外键执行此操作,这有助于保持数据清洁,但您还需要在提取数据时定义关系。
以下是一个例子:
表1:用户
user_id,用户名
表2:User_Details
user_id,密码,姓名,地址,DoB,性别
表3:收藏夹
fav_id,user_id,流派
表4:电影
film_id,film_name,流派
获取用户首选类型的列表将是:
SELECT Films.film_name
FROM Users
INNER JOIN Favourites ON Users.user_id = Favourites.user_id
INNER JOIN Films ON Favourites.genre = Films.genre
WHERE user_id = ?
这里几乎所有的过滤都是由INNER JOIN完成的。这将连接表,但只返回两个表中存在的结果。这意味着如果用户尚未提交任何首选项,则不会为该用户返回任何结果。 ON
指令告诉数据库关系是什么。
输出将是与用户喜欢的任何类型相关联的电影列表。