django 1.7 で django-mssql 1.6.2 パッケージを使用して、sql server 2008 からテーブルの 1 つまたは複数のレコードを取得しています。次のように「get」または「filter」を呼び出すと、すべて問題ありませんが、サーバー プログラムが非常に遅くなります。次の表を検討してください。
class Contact(models.Model):
id = models.IntegerField(primary_key=True, unique=True, null=False)
address = models.CharField(max_length = 100)
phone = models.IntegerField(unique=True)
class Parent(models.Model):
id = models.IntegerField(primary_key=True, unique=True, null=False)
name = models.CharField(max_length = 50)
contact = models.OneToOneField(Contact)
class Student(models.Model):
id = models.IntegerField(primary_key=True, unique=True, null=False)
name = models.CharField(max_length = 50)
parent = models.ForeignKey(Parent)
次のようなテンプレートでテーブルを印刷したいとします。
Student name | Parent name | Parent phone number
John | Jack | 1111111
Susan | Jack | 1111111
Dan | Jack | 1111111
Jackie | Sara | 2222222
次のようなコードを使用します。
query_results = list()
parents = Parent.objects.all()
for any_parent in parents:
students = Student.objects.filter(parent=any_parent)
for student in students:
element = TempObjectForStudent()
element.student_name = student.name
element.parent_name = any_parent.name
element.parent_phone = any_parent.contact.phone
query_results.append(element)
if students.__len__() == 0:
element = TempObjectForStudent()
element.student_name = 'without any active student'
element.parent_name = any_parent.name
element.parent_phone = any_parent.contact.phone
query_results.append(element)
class TempObjectForStudent():
student_name = None
parent_name = None
parent_phone = None
次のようなテンプレートを使用します。
{% for row in query_results %}
<tr><td>{{ row.student_name }}</td><td>{{ row.parent_name }}</td><td>{{ row.parent_phone }}</td></tr>
前述したように、問題はこの方法で大量のクエリを実行する速度です。結合を使用してすべてのテーブル データを 1 つのクエリで配信するにはどうすればよいですか?