gpt4 book ai didi

python - 使用 Python : Course registration data in JSON 处理数据库

转载 作者:太空宇宙 更新时间:2023-11-04 05:39:14 25 4
gpt4 key购买 nike

我能够让我的 Python 代码运行并打印出所需的结果,但我的问题出在 SQLite 表上。我被要求将此 SQL 命令应用于表:

SELECT hex(User.name || Course.title || Member.role ) AS X
FROM User JOIN Member JOIN Course
ON User.id = Member.user_id AND Member.course_id = Course.id
ORDER BY X

我能够在 SQLite 中执行该命令,但根据该项目的说明,X 应该以生成的结果列第一行中的 416 开头。然而,我在结果中第 1 行得到的 X 是:

43616C6962736933313030

到目前为止,这是我用 Python 编写的内容:

import sqlite3
import json

#Working with Java and Sqlite

conn = sqlite3.connect('rosterdb.sqlite')
cur = conn.cursor()

cur.executescript('''
DROP TABLE IF EXISTS User;
DROP TABLE IF EXISTS Member;
DROP TABLE IF EXISTS Course;

CREATE TABLE User(
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
name TEXT UNIQUE
);

CREATE TABLE Member(
user_id INTEGER UNIQUE,
course_id INTEGER UNIQUE,
role INTEGER,
PRIMARY KEY (user_id, course_id)
);

CREATE TABLE Course(
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
title TEXT UNIQUE
);
''')

#primary key for junction table is composite of both user_id and course_id

fname = raw_input("Enter file name:")
if (len(fname) < 1): fname = 'roster_data.json'

#prompts for file name

str_data = open(fname).read()
json_data = json.loads(str_data)

#opens the file and reads it all
#loads the json data and now is a python list
for entry in json_data:
title = entry[1];
name = entry [0];
role = entry[2];
#["Charley, "sill0", 1] represents the name, course title, and role

print name, title, role

cur.execute('''INSERT or IGNORE INTO User (name)
VALUES (?)''', (name, ))
cur.execute('SELECT id FROM User WHERE name = ?',(name, ))
user_id = cur.fetchone()[0]

cur.execute('''INSERT or IGNORE INTO Course (title)
VALUES (?)''', (title, ))
cur.execute('SELECT id FROM Course WHERE title = ?', (title, ))
course_id = cur.fetchone()[0]

cur.execute('''INSERT or REPLACE INTO Member (user_id, course_id, role)
VALUES (?,?,?)''', (user_id, course_id, role))

#INSERT, SELECT AND FETCHONE STATEMENTS
conn.commit()

这是我使用的 JSON 数据。这是关于学生的类(class)注册:roster_data.json 这是它的链接:

https://pr4e.dr-chuck.com/tsugi/mod/sql-intro/roster_data.php?PHPSESSID=9addd537cfe55c03585d2bfaa757f6b0

我不确定我是否正确实现了“角色”键。感谢您的投入!

最佳答案

问题是您使 Member.course_id 独一无二。因此,您不能拥有比类(class)更多的成员。在 INSERT or REPLACE into Member 中使用 REPLACE 可隐藏此错误。

只需在 Member.course 上删除 UNIQUE 约束,您就会得到预期的结果。

关于python - 使用 Python : Course registration data in JSON 处理数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34585657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com