好吧,多亏了以上的郝莲,我想出了一个实用而痛苦的解决方案。
假设我们有一个声明式样式的映射类,
Clazz以及一个
list复合主键值的元组
values(已编辑,以使用更好的(IMO)sql生成样式):
从sqlalchemy.sql.expression导入文本,bindparam... def __gParams(self,f,vs,ts,bs): 对于j,v枚举(vs): 键= f%(j + 97) bs.append(bindparam(key,value = v,type_ = ts [j])) 产生':%s'%键 def __gRows(self,ts,values,bs): 对于i,vs的枚举(值): f ='%% c%d'%i 产生'(%s)'%','.join(self .__ gParams(f,vs,ts,bs)) def __gKeys(self,k,ts): 对于k中的c: ts.append(c.type) 屈服强度str(c) def __makeSql(self,Clazz,values): t = [] b = [] 返回文字( '(%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))方法的性能明显好。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)