使用SQLAlchemy批量选择

时间:2010-03-13 14:36:17

标签: python sqlalchemy

我有一大组值V,其中一些可能存在于表T中。我想在表中插入那些尚未插入的值。到目前为止,我有代码:

for value in values:
        s = self.conn.execute(mytable.__table__.select(mytable.value == value)).first()      
        if not s:
            to_insert.append(value)

我觉得这比它应该运行得慢。我有一些相关的问题:

  1. 有没有办法构建一个select语句,以便提供一个列表(在本例中为'values'),sqlalchemy会使用与该列表匹配的记录进行响应?
  2. 这个代码在构造选择对象时是否过于昂贵?有没有办法构造一个select语句,然后在执行时参数化?

1 个答案:

答案 0 :(得分:3)

对于第一个问题,如果我正确理解你的问题,那就是这样的话

mytable.__table__.select(mytable.value.in_(values)

对于第二个问题,一次查询1行确实过于昂贵,尽管你可能没有选择。据我所知,SQLAlchemy中没有元组选择支持,所以如果有多个变量(想想多态键),那么SQLAlchemy无法帮助你。

无论哪种方式,如果您选择所有匹配的行并插入差异,您应该完成:) 这样的事情应该有效:

results = self.conn.execute(mytable.__table__.select(mytable.value.in_(values))
available_values = set(row.value for row in results)
to_insert = set(values) - available_values