在Python中

时间:2017-10-15 11:48:40

标签: python sqlite

我必须创建一个程序,将人们的帐户详细信息存储在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()

1 个答案:

答案 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指令告诉数据库关系是什么。

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