Skip to content

Commit a2c3682

Browse files
authored
Many_Students_in_Many_Courses
1 parent 70dd085 commit a2c3682

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import json
2+
import sqlite3
3+
4+
conn = sqlite3.connect('W4_Ass_1_rosterdb.sqlite')
5+
cur = conn.cursor()
6+
7+
# Do some setup
8+
cur.executescript('''
9+
DROP TABLE IF EXISTS User;
10+
DROP TABLE IF EXISTS Member;
11+
DROP TABLE IF EXISTS Course;
12+
CREATE TABLE User (
13+
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
14+
name TEXT UNIQUE
15+
);
16+
CREATE TABLE Course (
17+
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
18+
title TEXT UNIQUE
19+
);
20+
CREATE TABLE Member (
21+
user_id INTEGER,
22+
course_id INTEGER,
23+
role INTEGER,
24+
PRIMARY KEY (user_id, course_id)
25+
)
26+
''')
27+
28+
fname = 'roster_data.json'
29+
30+
str_data = open(fname).read()
31+
json_data = json.loads(str_data)
32+
33+
for entry in json_data:
34+
name = entry[0];
35+
title = entry[1];
36+
role = entry[2];
37+
38+
print(name, title, role)
39+
40+
cur.execute('''INSERT OR IGNORE INTO User (name)
41+
VALUES ( ? )''', (name,))
42+
cur.execute('SELECT id FROM User WHERE name = ? ', (name,))
43+
user_id = cur.fetchone()[0]
44+
45+
cur.execute('''INSERT OR IGNORE INTO Course (title)
46+
VALUES ( ? )''', (title,))
47+
cur.execute('SELECT id FROM Course WHERE title = ? ', (title,))
48+
course_id = cur.fetchone()[0]
49+
50+
cur.execute('''INSERT OR REPLACE INTO Member
51+
(user_id, course_id, role) VALUES ( ?, ?, ? )''',
52+
(user_id, course_id, role))
53+
54+
conn.commit()
55+
56+
sqlstr ='''
57+
SELECT hex(User.name || Course.title || Member.role ) AS X FROM
58+
User JOIN Member JOIN Course
59+
ON User.id = Member.user_id AND Member.course_id = Course.id
60+
ORDER BY X
61+
'''
62+
63+
print()
64+
for row in cur.execute(sqlstr) :
65+
print(str(row[0]))
66+
67+
cur.close()

0 commit comments

Comments
 (0)