当前位置: 首页 > 知识库问答 >
问题:

生成错误的脚本-引用表名

陆琦
2023-03-14

Django 1.5
PostgreSQL 9.2
psycopg2 2.4。6.

我正在使用QuerySet API中的额外功能,以便能够为Postgres使用多维数据集扩展中的函数-我知道出于可移植性的原因,额外功能不是很好,但无论如何我不会使用另一个DB(不是在Postgres之后,不是!)。所以问题是我从以下代码中得到了错误的SQL查询:

return self.select_related('item_place').extra(
            select={ 'distance': 'round(earth_distance(ll_to_earth(%s, %s), ll_to_earth(%s.latitude, %s.longitude))::numeric, 0)' },
            select_params=[latitude, longitude, ItemPlace._meta.db_table, ItemPlace._meta.db_table],
            where=['round(earth_distance(ll_to_earth(%s, %s), ll_to_earth(%s.latitude, %s.longitude))::numeric, 0) <= %s'],
            params=[latitude, longitude, ItemPlace._meta.db_table, ItemPlace._meta.db_table, radius])

似乎psycopg2用单引号括住了表名,这对于Postgres是不正确的,在正在执行的脚本中,我可以看到:

round(earth_distance(ll_to_earth(%s, %s), ll_to_earth('item_place'.latitude, 'item_place'.longitude))::numeric, 0)

我应该使用表名,因为我在另一个表中有纬度和经度,如果没有它,我会得到“模糊列”错误。现在我不知道,也许我做smth完全错了,这就是为什么我得到这个错误,或者也许这是一个错误在心理学2?有什么想法吗?

共有1个答案

卫泉
2023-03-14

根据文档,paramsselect_params用于指示Psycopg2引用参数。它不用于引用表名(通过双引号完成)。

引用Psycopg2的文档:

只能通过此方法绑定变量值:它不应用于设置表名或字段名。对于这些元素,在运行execute()之前应使用普通字符串格式。

此外,我们通常不会使用需要双重引用的标识符作为表名,请参阅此答案的注释。因此,在代码中直接使用表名是安全的:

return self.select_related('item_place').extra(
        select={ 'distance': 'round(earth_distance(ll_to_earth(%s, %s), ll_to_earth({tbl}.latitude, {tbl}.longitude))::numeric, 0)'.format(tbl=ItemPlace._meta.db_table) },
        select_params=[latitude, longitude],
        where=['round(earth_distance(ll_to_earth(%s, %s), ll_to_earth({tbl}.latitude, {tbl}.longitude))::numeric, 0) <= %s'.format(tbl=ItemPlace._meta.db_table)],
        params=[latitude, longitude])
 类似资料:
  • 在你完成模型后,你可以保存模型表结构、视图或外键成一个脚本文件。导出 SQL 功能为脚本生成一个 SQL 文件。选择 工具 -> 导出 SQL。 导出 SQL 的常规设置 文件 设置输出的文件名和位置。 对象 在现有的模型中选择你想导出的对象。 导出 SQL 的高级设置 下列选项是根据你所选择图表的数据库类型:MySQL、Oracle、PostgreSQL、SQLite、SQL Server 和

  • 当我尝试构建我的解决方案时,我得到以下错误消息: 严重性代码描述项目文件行禁止显示状态错误此项目引用了此计算机上缺少的NuGet包。使用NuGet包还原来下载它们。如需详细资讯,请参阅http://go.microsoft.com/fwlink/?LinkID=322105.遗失的档案是..\包\Microsoft。net . compilers . 1 . 1 . 1 \ build \ Mic

  • 问题内容: 我想在Bash脚本中引发错误,显示消息“测试用例失败!!”。如何在Bash中做到这一点? 例如: 问题答案: 这取决于您要将错误消息存储在何处。 您可以执行以下操作: 或以下内容: 引发异常时,将停止程序的执行。 您还可以使用类似“ 哪里是您可能要返回到操作系统的错误代码”(从0到255)的方法。在这里,只是可以退出的随机代码。当您需要向OS指示程序异常停止(例如发生错误)时,您需要将

  • 我想在Bash脚本中引发一个错误,消息为“测试用例失败!!!”。如何在Bash中做到这一点? 例如:

  • 使用的技术有:Spring-boot、Spring-data-Jpa、Hibernate、MySql 完全错误为: 自定义视图实体是: 产品列详细信息实体: 表格:

  • 问题内容: 我是一个大学时代的人,在我的大学里,要呈现任何形式的作业,必须有一个标准的封面(带有大学徽标,课程名称,教授的姓名,我的名字和bla bla bla)。 因此,我有一个.tex文件,该文件会生成我的标准封面pdf。它类似于: 因此,我想知道是否有一种方法可以制作一个Python脚本来询问我的作业标题,课程名称和其余字符串,并使用它们来生成封面。之后,它应编译.tex并使用给定的信息生成