使用 SQLAlchemy,给定一个列表,我想确定列表中的哪些值不存在于 sqlite DB 表的给定列中。一种方法如下:
def get_user_ids_not_in_DB(self, user_ids):
query__belongs = User_DB.user_id.in_(user_ids)
select__user_ids_in_DB = self.SQL_Helper.db.query(User_DB.user_id).filter(query__belongs)
user_ids_in_DB = zip(*select__user_ids_in_DB.all())[0]
return list(set(user_ids) - set(user_ids_in_DB))
有没有更快/更有效的方法来完成同样的事情?
最佳答案
选择所有用户,然后将其外部连接到别名 User_db 对象,然后为空的非别名 user_id 添加过滤器。
# an alias to a subquery on a table. All user ids in you list
ualias = aliased(User_DB, User_DB.user_id.in_(user_ids))
results = self.SQL_Helper.db.query(User_DB.user_id)\
.outerjoin(ualias, ualias.user_id == User_DB.user_id)\
.filter(ualias.user_id == None)
请原谅拼写错误,但这就是要点。
关于python - 使用 SQLAlchemy 确定哪些列表值不在数据库列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39520159/