Вы можете использовать | оператор для комбинирования запросов напрямую, без необходимости в Q-объектах:
result = Item.objects.filter(item.creator = owner) | Item.objects.filter(item.moderated = False)
(edit - изначально я был не уверен, вызвал ли это дополнительный запрос, но @spookylukey указал, что эта ленивая оценка набора запросов позаботится об этом)
Во-первых, вы не ОБНОВЛЯЕТе student_subject. Поскольку в таблице subject_bsit нет столбца student_id, вы не можете связать оценку со студентом.
ОБНОВЛЕНИЕ subject_bsit Установить оценку = @grade Где subject_ID = @subject_ID
Это позволит выполнить то же самое.
Это схема, которую я предлагаю.
ученики
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| studentID | int(11) | NO | PRI | NULL | auto_increment |
| studentName | varchar(100) | NO | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
классы
+-----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| studentID | int(11) | NO | PRI | NULL | |
| subjectID | int(11) | NO | PRI | NULL | |
| grade | decimal(3,2) | YES | | NULL | |
+-----------+--------------+------+-----+---------+-------+
Два иностранных ключа
grades.studentID (FK) < - Students.studentID (PK)
grades.subjectID (FK) < - subjects.subjectID (PK)
Обратите внимание, что таблица оценок содержит составной ключ, состоящий из 2 полей.
предметы
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| subjectID | int(11) | NO | PRI | NULL | auto_increment |
| subjectName | varchar(100) | NO | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
Пожалуйста, всегда используйте параметры при общении с базой данных. Это поможет защитить вашу базу данных от Sql Injection.
Блоки «Использование» закрывают и удаляют объекты базы данных даже в случае ошибки.
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim query As String = "Update grades
Set grade = @grade
Where studentId = @studentId And subjectID = @subjectID"
Using cn As New MySqlConnection(My.Settings.StudentConnection)
Using cmd As New MySqlCommand(query, cn)
cmd.Parameters.Add("@grade", MySqlDbType.Decimal).Value = 1
cmd.Parameters.Add("@studentID", MySqlDbType.Int32).Value = CInt(TextBox1.Text)
cmd.Parameters.Add("@subjectID", MySqlDbType.Int32).Value = 1
cn.Open()
cmd.ExecuteNonQuery()
End Using
End Using
End Sub
Чтобы отобразить оценки учеников, добавьте DataGridView в форму.
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim dt As New DataTable
Dim query As String = "Select st.studentName, sub.subjectName, g.grade
From grades g
Inner Join students st on g.studentID = st.studentID
Inner Join subjects sub on g.subjectID = sub.subjectID
Where st.studentID = @studentID;"
Using cn As New MySqlConnection(My.Settings.StudentConnection)
Using cmd As New MySqlCommand(query, cn)
cmd.Parameters.Add("@studentID", MySqlDbType.Int32).Value = CInt(TextBox1.Text)
cn.Open()
dt.Load(cmd.ExecuteReader)
End Using
End Using
DataGridView1.DataSource = dt
End Sub
Ваш запрос колеблется, он должен выглядеть примерно так
UPDATE student_subject
INNER JOIN subject_bsit
ON subject_bsit.subject_id = student_subject.sub_id
SET grade=?
where student_subject.student_id='" & Txtbox.Text & "' AND student_subject.sub_id = 1
.