Как добавить более одной информации к одному идентификатору? - PullRequest
0 голосов
/ 28 мая 2019

Я создаю код, который работает с базой данных, и хотел бы знать, как добавить более одной информации к одному и тому же идентификатору.

Это код контроля заметки учащегося.

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 Ответ

2 голосов
/ 29 мая 2019

Как правило, вы не будете напрямую, то есть, если «дополнительная информация» - это переменное количество информации на один идентификатор.

Например, предположим, что студент (предполагается, чтоСтрока студента имеет идентификатор ) имеет х количество заметок.

У вас не будет x столбцов (как если бы вы всегда добавляли новые столбцы).

Было бы неуклюже поместить все заметки в один столбец с разделителем, например что-то вроде «Привет, это моя первая заметка», «Спасибо, это моя вторая заметка» и т. Д.

  • например, если запятая разделяет данные, как вы справляетесь с запятыми в примечаниях.
  • как вы разделяете данные, скажем, чтобы найти примечание 3?

Что выобычно это нормализует данные и имеет таблицу для заметок, каждая из которых представляет собой отдельную строку.В таблице примечаний будет столбец, в котором относится к примечанию для соответствующего учащегося.- SQLite - это реляционная база данных, которая хорошо справляется с отношениями.

Пример

Рассмотрим следующее, где вместо Student имеется 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...