我试图找到一种方法使SQLAlchemy生成以下形式的查询:
从t中选择*其中((a1,b1),(a2,b2))中的(a,b);
这可能吗?
如果没有,有什么建议可以模仿吗?
好吧,多亏了以上的郝莲,我想出了一个实用而痛苦的解决方案。
假设我们有一个声明式样式的映射类,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))
方法的性能明显好。
问题内容: 我需要将列表排序为: 我已经使用了该函数,并且能够根据值进行排序…但是我无法按字母顺序进行排序,因为我需要按照数字的降序和字母的升序对列表进行排序数字具有相同的值。 问题答案: 使用元组作为浮点数为负的排序键可以反转顺序: 如果您不能进行求反(例如对字符串或字母值或非数字值),则可以利用Python sort函数稳定的事实,并分两步进行排序:
我有一个包含字符串的元组列表,例如: 现在我希望将每个字符串连接在一个元组中以创建一个以空格分隔的字符串列表。我使用了以下方法: 它工作得非常好。 然而,我的列表有超过一百万个元组。所以我的问题是,这种方法是否足够有效,或者是否有更好的方法来做到这一点。谢谢。
问题内容: 我有大量的这种格式的元组列表。每个元组的第二个字段是类别字段。 将其分解为相同类别(A,B,C等)的子列表的最有效方法是什么? 问题答案: 使用itertools.groupby: 产量 或者,要创建一个将每个组作为子列表的列表,可以使用列表理解: to的第二个参数是一个适用于(第一个参数)中每个项目的函数。预期会传回。然后将相同的所有连续项目组合在一起。 operator.itemg
问题内容: 我有一个清单“ a” 我需要找到一个特定数字的所有元组。说1 我怎么做? 问题答案: 如果只希望第一个数字匹配,则可以这样操作: 如果您仅搜索其中包含1的元组:
我必须将元组与元组列表进行比较,如果整数小于列表中的任何元组,则返回True。例如,如果我有将返回True,因为单独元组(“番茄”,10,5)中的整数比列表中的元组(“橙色”,11,6)小,但是如果我有将返回False。 我试试这个 但不工作时,它应该返回假,我不知道为什么? 注意:字符串对于这个问题并不重要,我必须忽略它。
我想要一个列表,它是列表元素列表的组合,例如:我的输入 输出应该是 非常感谢您的帮助。