ठीक है, ऊपर हाओ लिआन के लिए धन्यवाद, दर्दनाक समाधान अगर मैं एक कार्यात्मक के साथ आया था।
मान लें कि हम एक कथात्मक शैली मैप किया वर्ग, Clazz
, और मिश्रित प्राथमिक कुंजी मूल्यों की tuples के एक list
है, values
(एक बेहतर (IMO) एसक्यूएल पीढ़ी शैली का उपयोग करने संपादित):
from sqlalchemy.sql.expression import text,bindparam
...
def __gParams(self, f, vs, ts, bs):
for j,v in enumerate(vs):
key = f % (j+97)
bs.append(bindparam(key, value=v, type_=ts[j]))
yield ':%s' % key
def __gRows(self, ts, values, bs):
for i,vs in enumerate(values):
f = '%%c%d' % i
yield '(%s)' % ', '.join(self.__gParams(f, vs, ts, bs))
def __gKeys(self, k, ts):
for c in k:
ts.append(c.type)
yield str(c)
def __makeSql(self,Clazz, values):
t = []
b = []
return text(
'(%s) in (%s)' % (
', '.join(self.__gKeys(Clazz.__table__.primary_key,t)),
', '.join(self.__gRows(t,values,b))),
bindparams=b)
यह समाधान यौगिक या सरल प्राथमिक कुंजी के लिए काम करता है। हालांकि यह सामान्य प्राथमिक कुंजी के लिए शायद col.in_(keys)
से थोड़ा धीमा है।
मुझे अभी भी ऐसा करने के बेहतर तरीकों के सुझावों में रुचि है, लेकिन इस तरह से अब काम कर रहा है और or_(and_(conditions))
तरीके से for key in keys: do_stuff(q.get(key))
तरीके से बेहतर प्रदर्शन करता है।
मुझे लगता है कि से डर लगता था - जब यौगिक प्राथमिक कुंजी के साथ काम कर रहा है कि यह एक बहुत उपयोगी निर्माण होगा। जवाब के लिए धन्यवाद! – lostlogic