SQLAlchemy: العلاقة في المخططون بتجميع نتيجة وظيفة بدلا من استدعاء الدالة عندما يتم الاستعلام عن العلاقة

StackOverflow https://stackoverflow.com/questions/1638751

  •  08-07-2019
  •  | 
  •  

سؤال

ولدي عدد من مصممي الخرائط التي تبدو مثل هذا:

mapper(Photo,photo_table, properties = { "locale": relation(PhotoContent, uselist=False, primaryjoin=and_(photo_content_table.c.photoId == photo_table.c.id, photo_content_table.c.locale == get_lang()), foreign_keys=[photo_content_table.c.photoId, photo_content_table.c.locale])

ولقد نشر في أبراج، يجب على وظيفة حتى get_lang () ترجع إما "أون" أو "وفاق" على أساس الدورة الحالية.

from pylons.i18n import get_lang

والمشكلة هي أن يجمع SA ان "لغة" العلاقة مع النتيجة التي أرجعها get_lang () في وقت الترجمة. حتى لو كنت تفعل شيئا مثل هذا:

meta.Session.query(Photo).options(eagerload('locale')).get(id)

والعلاقة لا يدعو get_lang (). ويستخدم فقط مهما كانت قيمة get_lang () في وقت الترجمة.

وأي شخص يحصل على أي أفكار كيفية تنفيذ eagerloaders SQLAlchemy التي هي دينامية؟ وهذا من شأنه ان يكون المنقذ بالنسبة لي!

هل كانت مفيدة؟

المحلول

ويعدم البيانات المتعلقة عندما يتم تحميل الطبقة، وهو ما يعني كل استدعاء دالة يحصل على تقييم.

وحاول تمرير وظيفة بدلا من ذلك:

and_(photo_content_table.c.photoId == photo_table.c.id, photo_content_table.c.locale == get_lang)

لاحظ قوسين مفقود. الآن يجب ان تحصل على تقييم كلما يحصل الاستعلام العلاقة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top