您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

在元组列表中具有元组的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))方法性能明显好。

SQLServer 2022/1/1 18:36:28 有585人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶