类型错误:“dict”对象不支持在此查询的第二个实例上抛出的索引

2023-11-30

因此,我使用以下代码根据 Flask 中的用户输入构建查询:

    if empty_indic_form.validate_on_submit():
    query='select name, year, value, display_name from literal inner join ent on ent_id=ent.id where display_name in ('
    for i in indic_form.indicators.data:
        query=query+'\''+i+'\','
    query=query[:-1]+') '
    query=query+'and name in ('
    for c in order_c:
        query=query+c+','
    query=query[:-1]+')'
    data_return=db.engine.execute(query).fetchall()

我已经确认该查询看起来像它应该的那样,甚至有一个早期的会话,它返回了我所期望的 rowproxy 对象列表。但现在无论我做什么我都会收到此错误!

我已将查询设置为模板中的变量,以便可以将其打印出来,这是我得到的:

select name, year, value, display_name from literal inner join ent on ent_id=ent.id where display_name in ('Energy savings of primary energy (TJ)','Adolescent birth rate (women aged 15-19 years)','Net migration rate','Transmission and distribution losses (%)') and name in ('Burkina Faso', 'Ghana', 'Saudi Arabia', 'Pakistan')

我直接在 Postgres DB 上运行它,结果非常好。

在错误转储中我注意到data_return=db.engine.execute(query).fetchall()line 正在使用空字典作为参数进行构建,这当然最终会引发该错误。我可以强迫它不要这样做吗?查询对象看起来和上面的一样,现在有什么问题吗?我是否应该在刷新页面或转到主页时终止数据库会话?


您的方法中的根本错误是使用字符串连接来构建 SQL 查询。如果indic_form.indicators.data or order_c是用户提供的数据,例如来自 HTTP 请求的数据,您可能已经开放了SQL注入。错误

TypeError: 'dict' object does not support indexing

是此串联的结果:您的查询字符串包含流氓字符串"%",这是占位符语法的一部分psycopg– DB-API 通常与 SQLAlchemy 一起使用来与 Postgresql 对话。这正是不应该进行手动连接的原因。正确逃脱可能很困难。

将值列表传递给IN运算符是使用完成的元组适应在《Psycopg2》中。在 SQLAlchemy 中你可以使用in_列运算符,或扩展绑定参数那是1.2版本引入.

不幸的是,在您的特定情况下,SQLAlchemy 包装引擎有一个问题:由于您的所有参数都是元组,因此 SQLAlchemy 引擎认为您正在尝试将参数元组的可迭代传递给它:多参数和用途executemany()自动地。您可以使用以下方法解决此问题text()构造,它允许使用与 DB-API 无关的绑定参数语法和字典作为参数容器:

from sqlalchemy import text

...

if empty_indic_form.validate_on_submit():
    # Note that the placeholders shouldn't have enclosing parentheses
    query = """SELECT name, year, value, display_name
               FROM literal
               INNER JOIN ent ON ent_id = ent.id
               WHERE display_name IN :display_name
                 AND name IN :name"""

    data_return = db.engine.execute(
        text(query), {'display_name': tuple(indic_form.indicators.data),
                      'name': tuple(order_c)}).fetchall()

回顾一下:永远不要使用字符串连接或手动格式化来构建 SQL 查询。始终使用占位符/绑定参数。

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

类型错误:“dict”对象不支持在此查询的第二个实例上抛出的索引 的相关文章

  • 保存为 HDF5 的图像未着色

    我目前正在开发一个将文本文件和 jpg 图像转换为 HDF5 格式的程序 用HDFView 3 0打开 似乎图像仅以灰度保存 hdf h5py File Sample h5 img Image open Image jpg data np
  • 在 django ORM 中查询时如何将 char 转换为整数?

    最近开始使用 Django ORM 我想执行这个查询 select student id from students where student id like 97318 order by CAST student id as UNSIG
  • 安装了 32 位的 Python,显示为 64 位

    我需要运行 32 位版本的 Python 我认为这就是我在我的机器上运行的 因为这是我下载的安装程序 当我重新运行安装程序时 它会将当前安装的 Python 版本称为 Python 3 5 32 位 然而当我跑步时platform arch
  • Pandas 日期时间格式

    是否可以用零后缀表示 pd to datetime 似乎零被删除了 print pd to datetime 2000 07 26 14 21 00 00000 format Y m d H M S f 结果是 2000 07 26 14
  • 您可以格式化 pandas 整数以进行显示,例如浮点数的“pd.options.display.float_format”?

    我见过this https stackoverflow com questions 18404946 py pandas formatdataframe and this https stackoverflow com questions
  • 立体太阳图 matplotlib 极坐标图 python

    我正在尝试创建一个与以下类似的简单的立体太阳路径图 http wiki naturalfrequent com wiki Sun Path Diagram http wiki naturalfrequency com wiki Sun Pa
  • YOLOv8获取预测边界框

    我想将 OpenCV 与 YOLOv8 集成ultralytics 所以我想从模型预测中获取边界框坐标 我该怎么做呢 from ultralytics import YOLO import cv2 model YOLO yolov8n pt
  • Pandas Merge (pd.merge) 如何设置索引和连接

    我有两个 pandas 数据框 dfLeft 和 dfRight 以日期作为索引 dfLeft cusip factorL date 2012 01 03 XXXX 4 5 2012 01 03 YYYY 6 2 2012 01 04 XX
  • 使用 xlrd 打开 BytesIO (xlsx)

    我正在使用 Django 需要读取上传的 xlsx 文件的工作表和单元格 使用 xlrd 应该可以 但因为文件必须保留在内存中并且可能不会保存到我不知道如何继续的位置 本例中的起点是一个带有上传输入和提交按钮的网页 提交后 文件被捕获req
  • Python,将函数的输出重定向到文件中

    我正在尝试将函数的输出存储到Python中的文件中 我想做的是这样的 def test print This is a Test file open Log a file write test file close 但是当我这样做时 我收到
  • 如何在不丢失注释和格式的情况下更新 YAML 文件 / Python 中的 YAML 自动重构

    我想在 Python 中更新 YAML 文件值 而不丢失 Python 中的格式和注释 例如我想改造 YAML 文件 value 456 nice value to value 6 nice value 界面类似于 y yaml load
  • “隐藏”内置类对象、函数、代码等的名称和性质[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我很好奇模块中存在的类builtins无法直接访问的 例如 type lambda 0 name function of module
  • pip 列出活动 virtualenv 中的全局包

    将 pip 从 1 4 x 升级到 1 5 后pip freeze输出我的全局安装 系统 软件包的列表 而不是我的 virtualenv 中安装的软件包的列表 我尝试再次降级到 1 4 但这并不能解决我的问题 这有点类似于这个问题 http
  • 不同编程语言中的浮点数学

    我知道浮点数学充其量可能是丑陋的 但我想知道是否有人可以解释以下怪癖 在大多数编程语言中 我测试了 0 4 到 0 2 的加法会产生轻微的错误 而 0 4 0 1 0 1 则不会产生错误 两者计算不平等的原因是什么 在各自的编程语言中可以采
  • Pandas 将多行列数据帧转换为单行多列数据帧

    我的数据框如下 code df Car measurements Before After amb temp 30 268212 26 627491 engine temp 41 812730 39 254255 engine eff 15
  • 实现 XGboost 自定义目标函数

    我正在尝试使用 XGboost 实现自定义目标函数 在 R 中 但我也使用 python 所以有关 python 的任何反馈也很好 我创建了一个返回梯度和粗麻布的函数 它工作正常 但是当我尝试运行 xgb train 时它不起作用 然后 我
  • 模拟pytest中的异常终止

    我的多线程应用程序遇到了一个错误 主线程的任何异常终止 例如 未捕获的异常或某些信号 都会导致其他线程之一死锁 并阻止进程干净退出 我解决了这个问题 但我想添加一个测试来防止回归 但是 我不知道如何在 pytest 中模拟异常终止 如果我只
  • Scipy Sparse:SciPy/NumPy 更新后出现奇异矩阵警告

    我的问题是由大型电阻器系统的节点分析产生的 我基本上是在设置一个大的稀疏矩阵A 我的解向量b 我正在尝试求解线性方程A x b 为了做到这一点 我正在使用scipy sparse linalg spsolve method 直到最近 一切都
  • 如何计算Python中字典中最常见的前10个值

    我对 python 和一般编程都很陌生 所以请友善 我正在尝试分析包含音乐信息的 csv 文件并返回最常听的前 n 个乐队 从下面的代码中 每听一首歌曲都是一个列表中的字典条目 格式如下 album Exile on Main Street
  • 在 JavaScript 函数的 Django 模板中转义字符串参数

    我有一个 JavaScript 函数 它返回一组对象 return Func id name 例如 我在传递包含引号的字符串时遇到问题 Dr Seuss ABC BOOk 是无效语法 I tried name safe 但无济于事 有什么解

随机推荐

  • 计算每行的单词数

    我正在尝试在 DataFrame 中创建一个新列 其中包含相应行的字数 我正在寻找单词的总数 而不是每个不同单词的频率 我以为会有一种简单 快速的方法来完成这个常见任务 但是在谷歌搜索并阅读了一些 SO 帖子之后 1 2 3 4 我被困住了
  • 如何运行实习生来测试使用node.js运行的dojo应用程序?

    我正在尝试使用 intern 来测试在 node js 下运行的 dojo 应用程序 我的 intern js 配置文件类似于 define loader packages name elenajs location lib name te
  • 如何获取ActionBlock的输入队列的访问权限?

    我正在传递给某个类的 Actionblock 实例 如果我打电话 cancellationSource Cancel 然后处理将停止 但有些实例可以留在ActionBlock的输入队列中 我需要访问剩余的实例才能释放一些资源 我怎样才能实现
  • functools.wraps 有什么作用?

    在对此的评论中回答另一个问题 有人说他们不确定什么functools wraps正在做 所以 我问这个问题是为了在 StackOverflow 上记录它以供将来参考 什么是functools wraps到底是做什么 当您使用装饰器时 您正在
  • 如何修复查看的 pdf 中非常小的栅格的不良插值(evince 和 chrome)

    我想为一些学术工作创建矩阵的可视化 我决定通过让图像中的像素对应于矩阵中的值来解决这个问题 我创建了如下漂亮的小 png 适当放大后 您会得到一个非常合理的图像 这是 inkscape 内的屏幕截图 然而 当我将其导出为 pdf 时 evi
  • 根据选择器选择显示自定义结账字段

    基于这个工作答案 显示或隐藏其他 Checkout 自定义字段的自定义下拉选择器 在 WooCommerce 结帐页面中 我使用下面的代码创建一些额外的自定义字段并对所有结帐字段重新排序 我使用 jQuery 脚本根据选择器选择显示 隐藏一
  • 处理选中的复选框 PHP

    我有一个从数据库中获取数据的表 如下所示 不是表单 if mysql num rows result echo table border 1 cellspacing 0 width 62 echo tr echo th width 15 T
  • 使用jquery获取div内容的值

    我有以下 html 我想获取 div 的值 即 Other 我怎样才能用 jQuery 做到这一点 div class readonly label Other div Use text 提取div的内容 var text field fu
  • 将 C# 匿名类对象公开给 COM (JavaScript)

    NET 4 5 中是否有类 API 允许将 C 匿名类的实例公开为 COM 的后期绑定对象 例如 我想这样做 webBrowser Document InvokeScript TestMethod new object new helloP
  • 需要一个字符串 JSON 验证器 [重复]

    这个问题在这里已经有答案了 我正在使用 newtonsoft 的 JSON Net 并且喜欢它的每一分钟 但是 我正在使用JObject Parse jsonString 从响应字符串中获取 JToken 如果我发送无效的 JSON 则会出
  • 文件系统观察器不工作

    I added FileSystemWatcher在 Form1 Load 中像这样 Private Sub Form1 Load ByVal sender As System Object ByVal e As System EventA
  • asp.net mvc调用下拉ajax请求

    好的 我有一个包含不同记录的记录网格 另外 我还有一个下拉列表 它应该保存我选择的值并返回到同一阶段 我也必须发送一些ID 如何实现这一目标 表单位于我的代码中提交的运动中
  • iPhone SDK 默认 NSUserDefaults

    我已经设置用户默认为 UISlider 记录一个整数 问题是 如果用户刚刚安装了该应用程序 则该整数为零或 NULL 有没有办法检测它是否 NULL 与整数 这是我到目前为止的代码 void awakeFromNib NSUserDefau
  • 如何检查字符串是否是有效的十六进制颜色表示?

    例如 AA33FF 有效的十六进制颜色 Z34FF9 无效的十六进制颜色 其中有 Z AA33FF11 无效的十六进制颜色 有额外的字符 没有透明支持 0 9A F 6 i test AABBCC 具有透明的支持 0 9A F 6 0 9a
  • 具有多个方法的接口的 Lambda 表达式

    使用 Java 8 lambda 进行测试 当我向接口添加另一个方法时 为什么会出现错误 interface Something public String doit Integer i public int getID String na
  • JPA/Hibernate 和复合键

    我遇到过一些SO讨论和其他帖子 例如here here and here 其中使用复合主键JPA被描述为如果可能的话应避免的事情 或者由于遗留数据库而必需的或具有 毛茸茸 的极端情况 由于我们正在从头开始设计一个新数据库 并且没有任何遗留问
  • HasFlag 始终返回 True

    有没有办法检查我是否在一系列标志中获得了标志 Example Flags Enum TestEnum ALIVE DEAD ALMOSTDEAD HURT OTHERS check if is alive and has been hurt
  • iOS-在 Google Drive Api 上使用上传图像(错误“断言失败:GTLServer...”)

    我正在尝试在我的 iOS 应用程序中使用 Google 云端硬盘 我尝试上传文件 但出现以下错误 2013 06 17 14 38 57 964 GTL Demo 6495 11303 Assertion failure in GTLSer
  • 在 Golang 中解组 XML 数组:仅获取第一个元素

    Code type HostSystemIdentificationInfo struct IdentiferValue string xml identifierValue IdentiferType struct Label strin
  • 类型错误:“dict”对象不支持在此查询的第二个实例上抛出的索引

    因此 我使用以下代码根据 Flask 中的用户输入构建查询 if empty indic form validate on submit query select name year value display name from lite