python – SqlAlchemy Core和裸存在的查询
发布时间:2020-12-20 11:26:00 所属栏目:Python 来源:网络整理
导读:我遇到了一个问题,我必须使用SqlAlchemy Core查找表中是否存在数据. 我认为执行此查询的最佳方法是使用exists方法,该方法会在找到第一个项目后立即停止搜索.所以,我精心设计了这个版本的查询: conn = self.db.connect()query = exists().where(cookie_table
我遇到了一个问题,我必须使用SqlAlchemy Core查找表中是否存在数据.
我认为执行此查询的最佳方法是使用exists方法,该方法会在找到第一个项目后立即停止搜索.所以,我精心设计了这个版本的查询: conn = self.db.connect() query = exists().where(cookie_table.c.cookie_id == cookie_id) result = conn.execute(query) 但它产生了这个错误: StatementError: Not an executable clause (original cause: ArgumentError: Not an executable clause) 'EXISTS (SELECT * nFROM cookie nWHERE cookie.cookie_id = ?)' [] 我尝试了一点修改(与select结合),但无济于事. 所以,最终我提出了另一个解决方案,使用limit(1),这是有效的. conn = self.db.connect() query = select([1],cookie_table.c.cookie_id == cookie_id).limit(1) result = conn.execute(query).fetchone() return True if result is not None else False 我有两个问题: 如何用exists方法实现任务? 具有限制的查询是否与存在一样有效? 解决方法
根据
the documentation,存在适用于Select对象,并提供以下示例:
# use on an existing select() s = select([table.c.col1]).where(table.c.col2==5) s = exists(s) # construct a select() at once exists(['*'],**select_arguments).where(criterion) # columns argument is optional,generates "EXISTS (SELECT *)" # by default. exists().where(table.c.col2==5) 那你的代码出了什么问题呢? 好吧,根据我的理解,EXISTS本身不是一个指令,因此尝试执行exists()会失败,因为它不是可执行子句. 为了说明,您可以尝试使用简单的sqlite控制台: > EXISTS(SELECT * from t);是一个错误 如何解决您的问题? 将exists()包装在select()可执行语句中: result = conn.execute(select([exists().where(cookie_table.c.cookie_id == cookie_id)])) 它应该按预期工作: >>> print select([exists().where(users.c.name=='test')]) SELECT EXISTS (SELECT * FROM users WHERE users.name = :name_1) 现在,你应该使用存在还是限制?坦率地说,我不知道,我甚至不确定答案是否依赖于您的数据库引擎…… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |