gpt4 book ai didi

python - SqlAlchemy Core 和裸存在查询

转载 作者:太空狗 更新时间:2023-10-30 00:51:05 27 4
gpt4 key购买 nike

我遇到了一个问题,我必须使用 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方法完成任务?

使用limit 的查询是否与使用exists 的查询一样高效?

最佳答案

根据 the documentation , exists 适用于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); 是一个错误
  • SELECT EXISTS(SELECT * FROM t); 按预期产生 0 或 1。

如何解决您的问题?

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)

现在,您应该使用 exists 还是 limit?坦率地说,我不知道,我什至不确定答案是否取决于您的数据库引擎...

关于python - SqlAlchemy Core 和裸存在查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15381604/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com