在元组列表中具有元组的SQLAlchemy复杂in_子句

在元组列表中具有元组的SQLAlchemy复杂in_子句,第1张

在元组列表中具有元组的SQLAlchemy复杂in_子句

好吧,多亏了以上的郝莲,我想出了一个实用而痛苦的解决方案。

假设我们有一个声明式样式的映射类,

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))
方法的性能明显好。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5645869.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存