change to exec raw sql from django.db.connection to records

Brightcells 9 ans auparavant
Parent
Commettre
3253541b10
4 fichiers modifiés avec 78 ajouts et 33 suppressions
  1. 50 31
      group/views.py
  2. 25 0
      pai2/settings.py
  3. 1 0
      requirements.txt
  4. 2 2
      utils/sql/raw.py

+ 50 - 31
group/views.py

@@ -5,6 +5,7 @@ from __future__ import division
5 5
 import os
6 6
 import random
7 7
 
8
+import records
8 9
 import shortuuid
9 10
 from curtail_uuid import CurtailUUID
10 11
 from django.conf import settings
@@ -34,6 +35,7 @@ from utils.thumbnail_utils import make_thumbnail
34 35
 from utils.url_utils import img_url, share_url
35 36
 
36 37
 
38
+db = records.Database(settings.DATABASE_URL['default'])
37 39
 r = settings.REDIS_CACHE
38 40
 
39 41
 
@@ -884,45 +886,62 @@ def pai2_home_api(request):
884 886
     num = int(request.POST.get('num', settings.PAI2_HOME_PER_PAGE))
885 887
 
886 888
     # 执行原生 SQL 语句,获取首页照片列表
887
-    cursor = connection.cursor()
888
-    cursor.execute(PAI2_HOME_API.format(
889
+    # cursor = connection.cursor()
890
+    # cursor.execute(PAI2_HOME_API.format(
891
+    #     user_id=user_id,
892
+    #     offset=0,
893
+    #     rows=settings.PAI2_HOME_MAX_ROWS,
894
+    # ))
895
+    # rows = cursor.fetchall
896
+
897
+    # 使用 records 执行原生 SQL 语句,获取首页照片列表
898
+    rows = db.query(PAI2_HOME_API.format(
889 899
         user_id=user_id,
890 900
         offset=0,
891 901
         rows=settings.PAI2_HOME_MAX_ROWS,
892
-    ))
893
-    rows = cursor.fetchall()
902
+    )).all()
894 903
 
895 904
     # 首页照片分页
896 905
     rows, left = pagination(rows, page, num)
897 906
 
898 907
     # 首页照片信息
899
-    rows = [{
900
-        'group_id': row[0],
901
-        'group_name': row[1],
902
-        'group_default_avatar': row[2],
903
-        'group_avatar': row[3],
904
-        'group_from': row[4],
905
-        'photo_id': row[5],
906
-        'photo_url': img_url(row[6]),
907
-        'photo_w': row[7],
908
-        'photo_h': row[8],
909
-        'photo_thumbnail_url': img_url(row[9]),
910
-        'photo_thumbnail_w': row[10],
911
-        'photo_thumbnail_h': row[11],
912
-        'photo_thumbnail2_url': img_url(row[12]),
913
-        'photo_thumbnail2_w': row[13],
914
-        'photo_thumbnail2_h': row[14],
915
-        'photo_share_url': share_url(row[5]),  # Warning: Index of This Line is 5
916
-        'user_id': row[15],
917
-        'nickname': row[16],
918
-        'avatar': row[17],
919
-        'comment_num': row[18],
920
-        'thumbup_num': row[19],
921
-        'photo_from': row[20],
922
-        'created_at': row[21],
923
-    } for row in rows]
924
-
908
+    # rows = [{
909
+    #     'group_id': row[0],
910
+    #     'group_name': row[1],
911
+    #     'group_default_avatar': row[2],
912
+    #     'group_avatar': row[3],
913
+    #     'group_from': row[4],
914
+    #     'photo_id': row[5],
915
+    #     'photo_url': img_url(row[6]),
916
+    #     'photo_w': row[7],
917
+    #     'photo_h': row[8],
918
+    #     'photo_thumbnail_url': img_url(row[9]),
919
+    #     'photo_thumbnail_w': row[10],
920
+    #     'photo_thumbnail_h': row[11],
921
+    #     'photo_thumbnail2_url': img_url(row[12]),
922
+    #     'photo_thumbnail2_w': row[13],
923
+    #     'photo_thumbnail2_h': row[14],
924
+    #     'photo_share_url': share_url(row[5]),  # Warning: Index of This Line is 5
925
+    #     'user_id': row[15],
926
+    #     'nickname': row[16],
927
+    #     'avatar': row[17],
928
+    #     'comment_num': row[18],
929
+    #     'thumbup_num': row[19],
930
+    #     'photo_from': row[20],
931
+    #     'created_at': row[21],
932
+    # } for row in rows]
933
+
934
+    # [row.update({
935
+    #     'thumbup': get_group_photo_thumbup_flag(row['photo_id'], user_id),
936
+    #     'porder': get_lensman_order_record(row['photo_id'], user_id) if row['photo_from'] == GroupPhotoInfo.SESSION_GROUP else {}
937
+    # }) for row in rows]
938
+
939
+    rows = [dict(row) for row in rows]
925 940
     [row.update({
941
+        'photo_url': img_url(row['photo_path']),
942
+        'photo_thumbnail_url': img_url(row['photo_thumbnail_path']),
943
+        'photo_thumbnail2_url': img_url(row['photo_thumbnail2_path']),
944
+        'photo_share_url': share_url(row['photo_id']),
926 945
         'thumbup': get_group_photo_thumbup_flag(row['photo_id'], user_id),
927 946
         'porder': get_lensman_order_record(row['photo_id'], user_id) if row['photo_from'] == GroupPhotoInfo.SESSION_GROUP else {}
928 947
     }) for row in rows]
@@ -961,7 +980,7 @@ def lensman_photo_price(request):
961 980
     else:
962 981
         # 获取摄影师定价
963 982
         # TODO, 此处需要完整的摄影师定价
964
-        price = 999 if photo_type == 'origin' else 666
983
+        price = 999 if photo_type == 'origin' else 299
965 984
 
966 985
     r.set(lensman_photo_price_key, price)
967 986
 

+ 25 - 0
pai2/settings.py

@@ -130,6 +130,31 @@ DATABASES = {
130 130
     }
131 131
 }
132 132
 
133
+SCHEMES = {
134
+    'django.db.backends.postgresql_psycopg2': 'postgres',
135
+    'django.db.backends.postgresql_psycopg2': 'postgresql',
136
+    'django.db.backends.postgresql_psycopg2': 'pgsql',
137
+    'django.contrib.gis.db.backends.postgis': 'postgis',
138
+    'django.db.backends.mysql': 'mysql',
139
+    # 'django.db.backends.mysql': 'mysql2',
140
+    'django.contrib.gis.db.backends.mysql': 'mysqlgis',
141
+    'mysql.connector.django': 'mysql-connector',
142
+    'django.contrib.gis.db.backends.spatialite': 'spatialite',
143
+    'django.db.backends.sqlite3': 'sqlite',
144
+    'django.db.backends.oracle': 'oracle',
145
+    'django.contrib.gis.db.backends.oracle': 'oraclegis',
146
+}
147
+
148
+DATABASE_URL = {
149
+    k: '{scheme}://{user}:{password}@{host}:{port}/{name}'.format(
150
+        scheme=SCHEMES[v.get('ENGINE', '')],
151
+        user=v.get('USER', 'root'),
152
+        password=v.get('PASSWORD', ''),
153
+        host=v.get('HOST', 'localhost'),
154
+        port=v.get('PORT', 6039),
155
+        name=v.get('NAME', '')
156
+    ) for k, v in DATABASES.iteritems()
157
+}
133 158
 
134 159
 # Internationalization
135 160
 # https://docs.djangoproject.com/en/1.8/topics/i18n/

+ 1 - 0
requirements.txt

@@ -15,6 +15,7 @@ kkconst==1.1.2
15 15
 pep8==1.6.2
16 16
 pillow==2.9.0
17 17
 pytz==2015.7
18
+records==0.4.3
18 19
 redis==2.10.5
19 20
 shortuuid==0.4.2
20 21
 uWSGI==2.0.11.1

+ 2 - 2
utils/sql/raw.py

@@ -2,8 +2,8 @@
2 2
 
3 3
 PAI2_HOME_API = (
4 4
     r"select "
5
-    r"T1.group_id, T2.group_name, T2.group_default_avatar, T2.group_avatar, T2.group_from, T3.id, T3.photo_path, "
6
-    r"T3.photo_w, T3.photo_h, T3.photo_thumbnail_path, T3.photo_thumbnail_w, T3.photo_thumbnail_h, "
5
+    r"T1.group_id, T2.group_name, T2.group_default_avatar, T2.group_avatar, T2.group_from, T3.id as photo_id, "
6
+    r"T3.photo_path, T3.photo_w, T3.photo_h, T3.photo_thumbnail_path, T3.photo_thumbnail_w, T3.photo_thumbnail_h, "
7 7
     r"T3.photo_thumbnail2_path, T3.photo_thumbnail2_w, T3.photo_thumbnail2_h, T3.user_id, T3.nickname, T3.avatar, "
8 8
     r"T3.comment_num, T3.thumbup_num, T3.photo_from, T3.created_at "
9 9
     r"from (select * from group_groupuserinfo where user_id='{user_id}' and user_status=1) as T1 "