python - 使用 SQLAlchemy 确定哪些列表值不在数据库列中

标签 python python-2.7 sqlalchemy

使用 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/

相关文章:

python - 为什么这个 python 3 语句使用按位 or 而不是 "or"?

python - 在 Python 中返回和打印给出不同的输出

python pptx 判断一个表格的宽高

python - 如何在 Linux 上并行化 Python 程序

python - 使用 pyramid_tm 时,SQLAlchemy session.begin_nested() 应该与 transaction.commit() 一起提交吗?

python - 当循环之间的值增加 1 时,如何播放声音?标识增量为 1 的代码是什么样的?

python - pylucene 的自定义分词器,仅根据下划线对文本进行分词(保留空格)

python - jupyter notebook 不断重新连接

python - SQLAlchemy:过滤存储在 JSONB 字段的嵌套列表中的值

flask - 如何为 Alembic 迁移的每一行设置唯一值