如何在同一个ID中添加多个信息?

时间:2019-05-28 17:54:20

标签: python sqlite

我正在创建一个适用于数据库的代码,并且想知道如何向同一ID添加多个信息。

它用于学生的音符控制代码。

def add_series(self):
        conn = sqlite3.connect('obje_bd.db')
        cursor = conn.cursor()
        id_ = self.ids.txt_id.text.encode('utf-8')
        series = self.ids.txt_series_professor.text.encode('utf-8')
        # alterando os dados da tabela
        cursor.execute("""
              # would like to put all series in the same ID.
              INSERT INTO lista_professores WHERE id = ?, series = ?""")

        conn.commit()
        conn.close()

1 个答案:

答案 0 :(得分:2)

通常情况下,您不会直接这样做,也就是说,“更多信息” 是每个id的可变信息量。

例如,假设一个学生(假设学生所在的行具有 id )具有x个笔记。

您将没有x列(因为您将永远添加新列)。

用分隔符将所有笔记放在一列中会很笨拙,例如,“你好,这是我的第一个笔记”,“谢谢你,这是我的第二个笔记”等等。

  • 例如如果逗号分隔数据,您如何处理注释中的逗号。
  • 如何拆分数据,例如查找注释3?

通常要做的是归一化数据,并为注释创建一个表,每个注释都是单独的一行。笔记表中会有一列,可关联与相应学生的笔记。 -SQLite是一个关系数据库,可以很好地处理关系。

示例

考虑以下内容,其中不是学生表中有x个数据(笔记)的学生,而是存在另一个笔记表,并且每个笔记都包含一列,用于将笔记与学生相关联:-

DROP TABLE IF EXISTS Student;
DROP TABLE IF EXISTS Note;
CREATE TABLE IF NOT EXISTS Student (id INTEGER PRIMARY KEY, name TEXT);
CREATE TABLE IF NOT EXISTS Note(id INTEGER PRIMARY KEY, studentReference INTEGER, note TEXT);

INSERT INTO Student (name) VALUES ('Fred'),('Mary'),('Anne'); -- ids will be 1 2 and 3 

INSERT INTO Note (studentReference,note) VALUES
    (1,'My Note 1'),
    (3,'My Note 1'),
    (3,'My Note 2'),
    (2,'My Note 1'),
    (3,'My Note 3'),
    (2,'My Note 2'),
    (2,'My Note 3'),
    (1,'My Note 2'),
    (1,'My Note 3'),
    (1,'My Note 4'),
    (1,'My Note 5'),
    (3,'My Note 4');

    SELECT * FROM Student; -- The Student table
    SELECT * FROM Note; -- The Note table
    -- Get the Notes with the Student (both have the same result)
    SELECT name, note FROM Note JOIN Student ON Student.id = Note.studentReference ORDER BY Student.name;
    SELECT name, note FROM Student JOIN  Note ON Student.id = Note.studentReference ORDER BY Student.name;
    -- Get the number of notes and all the notes concatenated as a CSV per student
    SELECT student.name,count(), group_concat(note) FROM student JOIN Note ON Student.id = Note.studentReference GROUP BY student.id;

结果

1学生桌

enter image description here

2注释表

enter image description here

3和4学生和笔记

enter image description here

5个注释的数量和每个学生的CSV注释

enter image description here