使用SQLAlchemy更快地执行批量插入,同时避免重复

时间:2016-10-06 22:39:58

标签: python sqlalchemy

我正在使用以下方法执行批量插入,并可选择避免使用SQLAlchemy插入重复项:

def bulk_insert_users(self, users, allow_duplicates = False):
    if not allow_duplicates:
        users_new = []

        for user in users:
            if not self.SQL_IO.db.query(User_DB.id).filter_by(user_id = user.user_id).scalar():
                users_new.append(user)

        users = users_new

    self.SQL_IO.db.bulk_save_objects(users)
    self.SQL_IO.db.commit()

可以实现上述功能,使功能更快吗?

2 个答案:

答案 0 :(得分:1)

您可以先加载所有用户ID,将它们放入集合中,然后使用user.user_id in existing_user_ids确定是否添加新用户,而不是每次都发送SELECT查询。即使有成千上万的用户,这也会非常快,特别是与每个用户联系数据库相比。

答案 1 :(得分:1)

你有多少用户?您一次查询一个用户,即该循环的每次迭代。您可能有更多的运气查询所有用户ID,将它们放入列表中,然后检查该列表。

existing_users = #query for all user IDs
for user in new_users:
    if user not in existing_users:
        #do_stuff