我正在使用以下方法执行批量插入,并可选择避免使用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()
可以实现上述功能,使功能更快吗?
答案 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