about summary refs log tree commit diff
diff options
context:
space:
mode:
authorArtem Tarasov2015-05-13 13:09:38 +0300
committerArtem Tarasov2015-05-13 13:09:38 +0300
commitee84f921331e7e68df0d57a1bc285b5f91780135 (patch)
treea84519eaab298e8d7513758372ee1dcef9addabb
parentd9f617afba9c3881f273902447aef94755a6deee (diff)
downloadgenenetwork2-ee84f921331e7e68df0d57a1bc285b5f91780135.tar.gz
replace multiple tissue queries with a single one
-rwxr-xr-xwqflask/base/data_set.py28
1 files changed, 16 insertions, 12 deletions
diff --git a/wqflask/base/data_set.py b/wqflask/base/data_set.py
index 40c38fe8..f5bd5cb8 100755
--- a/wqflask/base/data_set.py
+++ b/wqflask/base/data_set.py
@@ -29,6 +29,7 @@ import json
 import gzip
 import cPickle as pickle
 import itertools
+from operator import itemgetter
 
 from redis import Redis
 Redis = Redis()
@@ -335,18 +336,21 @@ class DatasetGroup(object):
                                 datasets=[item]))
 
         #03/09/2009: Xiaodong changed the SQL query to order by Name as requested by Rob.
-        tissues = g.db.execute("SELECT Id, Name FROM Tissue order by Name")
-        for item in tissues.fetchall():
-            tissue_id, tissue_name = item
-            data_sets = g.db.execute('''SELECT ProbeSetFreeze.FullName,ProbeSetFreeze.Name FROM ProbeSetFreeze, ProbeFreeze,
-            InbredSet WHERE ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id and ProbeFreeze.TissueId = %s and
-            ProbeSetFreeze.public > %s and ProbeFreeze.InbredSetId = InbredSet.Id and InbredSet.Name like %s
-            order by ProbeSetFreeze.CreateTime desc, ProbeSetFreeze.AvgId ''',
-            (tissue_id, webqtlConfig.PUBLICTHRESH, "%" + self.name + "%"))
-            dataset_sub_menu = [item for item in data_sets.fetchall() if item]
-            if dataset_sub_menu:
-                dataset_menu.append(dict(tissue=tissue_name,
-                                    datasets=dataset_sub_menu))
+        results = g.db.execute('''
+            SELECT Tissue.Name, ProbeSetFreeze.FullName,ProbeSetFreeze.Name
+            FROM ProbeSetFreeze, ProbeFreeze, InbredSet, Tissue
+            WHERE ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id and
+                  ProbeFreeze.TissueId = Tissue.Id and
+                  ProbeSetFreeze.public > %s and
+                  ProbeFreeze.InbredSetId = InbredSet.Id and
+                  InbredSet.Name like %s
+            ORDER BY Tissue.Name, ProbeSetFreeze.CreateTime desc, ProbeSetFreeze.AvgId
+            ''', (webqtlConfig.PUBLICTHRESH, "%" + self.name + "%"))
+
+        for tissue_name, dataset in itertools.groupby(results.fetchall(), itemgetter(0)):
+            dataset_sub_menu = [item[1:] for item in dataset]
+            dataset_menu.append(dict(tissue=tissue_name,
+                                     datasets=dataset_sub_menu))
 
         Redis.set(key, pickle.dumps(dataset_menu, pickle.HIGHEST_PROTOCOL))
         Redis.expire(key, 60*5)