我有一大组值V,其中一些可能存在于表T中。我想在表中插入那些尚未插入的值。到目前为止,我有代码:
for value in values:
s = self.conn.execute(mytable.__table__.select(mytable.value == value)).first()
if not s:
to_insert.append(value)
我觉得这比它应该运行得慢。我有一些相关的问题:
答案 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