执行 sqlalchemy 存在查询

2023-11-29

我无法理解如何执行查询来检查 sqlalchemy 中是否已存在匹配的记录。我可以在网上找到的大多数示例似乎都引用了我没有的“会话”和“查询”对象。

这是一个简短的完整程序,说明了我的问题:
1.使用“person”表设置内存中的sqlite数据库。
2. 向person表中插入两条记录。
3. 检查表中是否存在特定记录。这就是它呕吐的地方。

from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData
from sqlalchemy.sql.expression import exists

engine = create_engine('sqlite:///:memory:', echo=False)
metadata = MetaData()

person = Table('person', metadata,
                        Column('id', Integer, primary_key=True),
                        Column('name', String(255), nullable=False))

metadata.create_all(engine)
conn = engine.connect()

s = person.insert()
conn.execute(s, name="Alice")
conn.execute(s, name="Bob")

print("I can see the names in the table:")
s = person.select()
result = conn.execute(s)
print(result.fetchall())

print('This query looks like it should check to see if a matching record exists:')
s = person.select().where(person.c.name == "Bob")
s = exists(s)
print(s)

print("But it doesn't run...")
result = conn.execute(s)

该程序的输出是:

I can see the names in the table:
[(1, 'Alice'), (2, 'Bob')]
This query looks like it should check to see if a matching record exists:
EXISTS (SELECT person.id, person.name 
FROM person 
WHERE person.name = :name_1)
But it doesn't run...
Traceback (most recent call last):
  File "/project_path/db_test/db_test_env/exists_example.py", line 30, in <module>
    result = conn.execute(s)
  File "/project_path/db_test/db_test_env/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 945, in execute
    return meth(self, multiparams, params)
  File "/project_path/db_test/db_test_env/lib/python3.6/site-packages/sqlalchemy/sql/elements.py", line 265, in _execute_on_connection
    raise exc.ObjectNotExecutableError(self)
sqlalchemy.exc.ObjectNotExecutableError: Not an executable object: <sqlalchemy.sql.selectable.Exists object at 0x105797438>

s.exists() 仅构建存在子句。要让代码正常工作,您所需要做的就是为其生成一个选择。

s = exists(s).select()

这是您的完整示例:

from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData
from sqlalchemy.sql.expression import exists

engine = create_engine('sqlite:///:memory:', echo=False)
metadata = MetaData()

person = Table('person', metadata,
                        Column('id', Integer, primary_key=True),
                        Column('name', String(255), nullable=False))

metadata.create_all(engine)
conn = engine.connect()

s = person.insert()
conn.execute(s, name="Alice")
conn.execute(s, name="Bob")

print("I can see the names in the table:")
s = person.select()
result = conn.execute(s)
print(result.fetchall())

print('This query looks like it should check to see if a matching record exists:')
s = person.select().where(person.c.name == "Bob")
s = exists(s).select()
print(s)

print("And it runs fine...")
result = conn.execute(s)
print(result.fetchall())
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

执行 sqlalchemy 存在查询 的相关文章

随机推荐

  • 在 C# 中将 MM/DD/YYYY HH:MI:SS AM/PM 转换为 DD/MM/YYYY

    如何使用 C 将 MM DD YYYY HH MI SS AM PM 转换为 DD MM YYYY 我正在使用 C 2008 Thanks Use TryParseExact解析为DateTime then ToString带有要转换回来的
  • Redis 服务器重启/扩展后如何重新连接 Redis 客户端

    我有一个 azure 应用程序服务 基于 Docker 它使用 Redis 作为缓存 当我重新启动 扩展 Redis 服务器时 azure 应用程序服务内的 Redis 客户端与服务器失去连接并引发以下异常 等待响应超时 出站 0KiB 入
  • 如何更新sqlite中的整列? [复制]

    这个问题在这里已经有答案了 可能的重复 需要更新SQLite中某列的值 大家好 我的 Android 应用程序的 SQLite 数据库表中有 5 条记录 值为 5 25 15 25 25 现在我想用 50 更新我的整个列 例如 5 50 5
  • UrlEncodedFormEntity 的 Android HTTP 上传进度

    有几个问题讨论了如何使用 multipart form data 数据格式将进度指示添加到 Android 中的 HTTP 文件上传中 建议的典型方法是由最佳答案概括的无法获取 http POST 文件上传的进度 Android 包含完整
  • Django Rest 框架表单

    我想做的事 Django Rest Framework 附带一个渲染器 用于从序列化器返回 HTML 表单 1 在仔细阅读文档和代码之后 我仍然无法弄清楚如何让它呈现空白表单 我认为问题可能在于 我不知道如何实例化空白序列化器 在 DRF
  • yii 验证码无法正确验证

    我尝试使用 yii 添加验证码到我的联系表单 但验证存在一些问题 My model class ContactForm extends CFormModel public verifyCode public function rules r
  • iPhone 应用程序提交:错误 ITMS-90171:无效的捆绑结构 (constants.o)

    我做了大量的研究 并做了几件事来尝试消除这个错误 绝对没有任何作用 当我从 Xcode 中将存档上传到应用程序商店时 出现以下错误 错误 ITMS 90171 无效的捆绑包结构 不允许使用二进制文件 app constants o 除了受支
  • Ngb Tab 在选项卡更改时重新加载组件

    我有 2 个选项卡 选项卡内容内有一个我开发的组件 当我从一个选项卡移动到另一个选项卡并返回到放置我开发的组件的选项卡时 它会重新加载并调用其生命周期方法 这给我带来了问题 有没有办法在选项卡更改时停止重新加载组件 HTML 代码
  • asp.net mvc 和 recaptcha 操作 [重复]

    这个问题在这里已经有答案了 当用户提交表单时 我想间歇性地显示 重定向到验证码页面 基于一些自定义规则 如果经过验证 则执行 提交第一个操作 有没有办法使用 ActionFilter 来做到这一点 或者任何其他方式 这也是 http egl
  • 在ubuntu 16.04上安装pip

    我正在安装pip对于 python3 我为此使用了以下命令 sudo apt get install python3 pip 但安装后还是提示pip未安装 I have python 3 5 2安装 The python3 pip软件包为
  • TinyMCE 在隐藏文本区域之前不会从文本区域获取内容

    我在页面上运行了一个 TinyMCE 实例 使我能够编辑现有帖子 我查询数据库并填充变量 content与存储的文本 然后我有以下 HTML
  • 仅使用 xamarin Andriod 连接到 mySQL 数据库时出现问题,但可在 iOS 和 UWP 中使用

    我正在从 Xamarin 跨平台应用程序直接连接到 mySQL 服务器 仅用于学习目的 该连接在 iOS 和 UWP 中都运行良好 但在 Android 中会抛出此行错误 等待 conn OpenAsync 这是完整的错误 System T
  • LLVM JIT编译的程序找不到外部函数

    我的程序 JIT 编译 LLVM IR 模块并调用函数foo如果其中定义在运行时失败foo使用外部定义的函数 LLVM ERROR Program used external function glutInit which could no
  • 为什么 numpy.vectorize 在使用不确定性时会发出有关无效值的警告?

    使用 Python 3 10 numpy 1 23 5 和不确定性3 1 7 在 Linux 上 特别是在 Fedora 37 上使用 conda forge 的软件包 代码如下 import numpy as np from uncert
  • Qt - 如何在多个平台上保存配置文件

    我正在编写一个 Qt 应用程序 需要将一些设置保存到用户的配置目录中 我想出了以下代码来获取此文件夹 ifdef Q WS WIN path QDir homePath Application Data Timely else path Q
  • excel vba选择表格范围

    我想选择一个表 它将有固定的列 其中 4 个 但可以有任意数量的行 也可以有空行 我将如何选择表格范围 例如 当前选择是B2 to E5 我怎样才能在VBA中以编程方式获得这个 以下是如何设置对表的引用 你应该观看 Excel VBA 简介
  • 基于通配符替换字符串的 SQL 查询

    我想在我的 WP 数据库上运行此类查询以删除 id more 的所有跨度实例 UPDATE wp posts SET post content REPLACE post content p span span p 但在我的示例中 more
  • 如何使用适配器在按钮单击时添加 ListView 项目

    如何获取在 EditText 中输入的数据并通过单击该窗口中的 提交 将其添加到以前的活动列表视图项目中 我需要做的是 创建 EditText 和提交按钮 在同一个 Activity 中创建列表视图 通过单击提交按钮 它应该在列表视图中显示
  • Cobertura 显示正确的覆盖范围,但在声纳中许多文件显示 0% 覆盖范围

    I have write multiple JUnit test classes for my project The code covergae is 80 when I see it in Eclipse using cobertura
  • 执行 sqlalchemy 存在查询

    我无法理解如何执行查询来检查 sqlalchemy 中是否已存在匹配的记录 我可以在网上找到的大多数示例似乎都引用了我没有的 会话 和 查询 对象 这是一个简短的完整程序 说明了我的问题 1 使用 person 表设置内存中的sqlite数