如何使用 postgresql 在 sqlalchemy 中显式转换数组文字的类型?

2023-11-24

在尝试通过cast、type_coerce和type_来转换文字数组类型并且没有成功之后,我想我会问。

from pprint import pprint

from sqlalchemy import String, null, Integer, Column, ForeignKey, \
    create_engine
from sqlalchemy.dialects.postgresql import array
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import aliased, sessionmaker, relationship

Base = declarative_base()

temp_db_name = 'cf_LlAcKpxFHzOW'
engine = create_engine('postgresql://localhost/{}'.format(temp_db_name))


class JobGroup(Base):
    __tablename__ = 'job_group'

    id = Column(Integer, primary_key=True)
    name = Column(String, nullable=False)
    parent_id = Column(Integer, ForeignKey("job_group.id"))
    parent = relationship("JobGroup", remote_side=[id])

    def __init__(self, name, parent=None):
        self.name = name
        self.parent = parent


    def __repr__(self):
        return "JobGroup {} {}".format(self.id, self.name)

Base.metadata.create_all(bind=engine)

Session = sessionmaker()
Session.configure(bind=engine)

session = Session()

gp_group = JobGroup(name="grandpa")
p_group = JobGroup(name="parent", parent=gp_group)
c_group = JobGroup(name="child", parent=p_group)

session.add(gp_group)
session.add(p_group)
session.add(c_group)
session.commit()
session.refresh(gp_group)
session.refresh(p_group)
session.refresh(c_group)

# for jg in session.query(JobGroup).all():
#     pprint(jg.__dict__)

try:
    tree_parts = session.query(
        JobGroup.id,
        JobGroup.name,
        JobGroup.parent_id,
        array([]).label("ancestors")
    ).filter(
        JobGroup.parent_id == null()
    ).cte(name="tree_parts", recursive=True)

    jg_alias = aliased(JobGroup, name="jg")
    tree_parts_alias = aliased(tree_parts, name="tp")

    tree_parts = tree_parts.union_all(
        session.query(
            jg_alias.id,
            jg_alias.name,
            jg_alias.parent_id,
            (tree_parts_alias.c.ancestors + 
             array([jg_alias.parent_id])).label("ancestors")
        ).filter(jg_alias.parent_id == tree_parts_alias.c.id)
    )
    pprint(session.query(tree_parts).all())
finally:
    session.rollback()
    session.close_all()
    Base.metadata.drop_all(bind=engine)

这会导致 postgres 错误:

sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) cannot determine type of empty array
LINE 2: ...p.name AS name, job_group.parent_id AS parent_id, ARRAY[] AS...
                                                              ^
HINT:  Explicitly cast to the desired type, for example ARRAY[]::integer[].

对于此用例,有多种方法可以解决此问题,例如使用无效的parent_id 整数(例如-1)预先填充祖先数组文字。


铸造非常简单:

from sqlalchemy import cast, Integer
from sqlalchemy.dialects.postgresql import array, ARRAY

cast(array([]), ARRAY(Integer))

在没有看到您尝试过的内容的情况下,我只能推测您尝试投射到array(Integer)代替ARRAY(Integer).

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

如何使用 postgresql 在 sqlalchemy 中显式转换数组文字的类型? 的相关文章

  • scipy.misc.imshow RuntimeError('无法执行图像视图')

    我正在测试scipy misc imshow https docs scipy org doc scipy 0 15 1 reference generated scipy misc imshow html我得到了运行时错误 无法执行图像查
  • 如何使用 lxml 解析包含前缀但没有名称空间声明的 XML?

    我有一堆使用前缀但没有相应名称空间声明的 XML 文件 像这样的东西
  • pip 安装失败,SSL 证书验证失败 (_ssl.c:833)

    我无法通过 pip install 安装任何外部 python 模块 我已经正确安装了 python 但如果我使用 pip install 它会显示此错误 这是我运行后的代码pip install pytesseract C Users 1
  • 蜘蛛内的Scrapyd jobid值

    Scrapy 框架 Scrapyd 服务器 我在获取蜘蛛内部的 jobid 值时遇到一些问题 将数据发布到后http localhost 6800 schedule json http localhost 6800 schedule jso
  • 我应该为 MySQL 使用什么 python 3 库? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 据我所知 MySQLdb 仍然没有移植到 Python 3 pypy 上似乎有另一个名为 PyMySQL
  • 在 Python 中绘制分类数据的三个维度

    我的数据包含三个我试图可视化的分类变量 城市 五个之一 职业 四种之一 血型 四种之一 到目前为止 我已经成功地以一种我认为易于使用的方式对数据进行了分组 import numpy as np pandas as pd Make data
  • 如何为 C 分配的 numpy 数组注册析构函数?

    我想在 C C 中为 numpy 数组分配数字 并将它们作为 numpy 数组传递给 python 我可以做的PyArray SimpleNewFromData http docs scipy org doc numpy reference
  • 将多个数组合并为一个数组

    如何将多个数组合并为一个二维数组 鉴于我有以下输入 var arr1 1 2 3 var arr2 a b c var arr3 aa bb cc 我需要这样的输出 1 a aa 2 b bb 1 c cc 我认为你想要的是将三个数组组合成
  • 包含字符串和数字的数组

    在 Objective C 中 很容易创建一个异构数组 如下所示 NSArray myArray String1 String2 123 456 有什么方法可以快速创建这样的数组吗 如果是的话怎么办 Note 我在 swift 中尝试了类似
  • 使用 python 只读取 Excel 中的可见行

    我想只读取 python 中 Excel 工作表中的可见行 输入 Excel表 所以当我过滤时 作为 python 中的输出 在本例中我将仅获得可见数据 1 行 这是我的代码 from openpyxl import load workbo
  • 如何为 Python 中的应用程序设置专用屏幕区域?

    MS OneNote 就是一个很好的例子 它可以选择固定在屏幕的一侧 并将所有其他窗口推到一侧 当最大化或调整其他窗口大小时 它们只能扩展到 OneNote 的边缘 Python 使用 Tkinter 或其他模块是否具有此功能 感谢您的帮助
  • pandas to_sql sqlalchemy 与 secure_transport 的连接

    我正在尝试将数据发送到具有 require secure transport ON 的服务器上的 mysql 数据库 当我尝试使用以下代码连接到它时 import pandas as pd import pymysql from sqlal
  • 如何绘制多类分类器的精度和召回率?

    我正在使用 scikit learn 我想绘制精度和召回曲线 我正在使用的分类器是RandomForestClassifier scikit learn 文档中的所有资源都使用二元分类 另外 我可以绘制多类的 ROC 曲线吗 另外 我只找到
  • PyCharm - 如何挂起所有线程

    我们使用 PyCharm 5 0 1 进行多线程调试 当它在断点处停止时 只有特定线程停止 而所有其他线程继续 这使得 冻结时刻 和检查参数值以及其他线程的当前状态变得困难 当其中一个线程在断点处停止时 是否可以挂起所有线程 这在最新的 P
  • C++:.bmp 到文件中的字节数组

    是的 我已经解决了与此相关的其他问题 但我发现它们没有太大帮助 他们提供了一些帮助 但我仍然有点困惑 所以这是我需要做的 我们有一个 132x65 的屏幕 我有一个 132x65 的 bmp 我想遍历 bmp 并将其分成小的 1x8 列以获
  • 在python中安装scipy模块时出错

    我正在尝试使用 pip 在 python 中安装 scipy 模块 它显示以下错误 Command c users sony appdata local programs python python35 32 python exe u c
  • 如何修改 contenteditable 元素的innerHTML

    我使用 Selenium 与 Chrome driver 和 python3 6 来测试网站 我在网页中有代码片段如下 div class 3F6QL 2WovP div class 39LWd Type a message div div
  • 如何可视化多维数据上的 kmeans 聚类

    我在 mnist 数据集上使用 kmeans 聚类算法 并希望可视化聚类后的图 到目前为止我做了这个 from mnist import MNIST mndata MNIST Datasets X train y train mndata
  • 在多个图表上绘制一条线

    I don t know how this thing is called or even how to describe it so the title may be a little bit misleading The first a
  • django admin 中内联模型的分页器

    我有这个简单的 django 模型 由一个传感器和特定传感器的值组成 每个日射强度计的值数量很多 gt 30k 是否可以以某种方式分页PyranometerValues在特定日期或一般情况下将分页器应用于管理内联视图 class Pyran

随机推荐

  • 使用 IJava 的 Google Colab 笔记本在安装 + 刷新后卡在“正在连接”

    在初始 IJava 安装和浏览器页面刷新后 我的所有笔记本都停止连接 以前做什么工作 执行第一个单元格 wget https github com SpencerPark IJava releases download v1 3 0 ija
  • 有没有办法在更改横向方向后转换坐标系?

    在基于视图的 iPhone OS 应用程序中 我将方向从初始纵向更改为纵向横向 UIInterfaceOrientationLandscapeRight 但现在 x y 原点 0 0 位于左下角角 而不是通常的左上角 每次我想做一些涉及坐标
  • 是否有希望将ForeignPtr转换为ByteArray#(对于函数::ByteString -> Vector)

    出于性能原因 我想要一个零拷贝的转换ByteString 目前严格 Vector 自从Vector只是一个ByteArray 在引擎盖下 以及ByteString is a ForeignPtr这可能看起来像 caseBStoVector
  • 将多边形坐标从 Double 转换为 Long 以与 Clipper 库一起使用

    我有两个多边形 它们的顶点存储为双坐标 我想找到这些多边形的相交区域 所以我正在查看快船库 C 版本 问题是 Clipper 只适用于整数数学 它使用 Long 类型 有没有一种方法可以安全地使用相同的比例因子变换我的两个多边形 将它们的坐
  • Java 的 Groovy 超集 [重复]

    这个问题在这里已经有答案了 Groovy 是 Java 的超集吗 如果不是 Groovy 和 Java 之间有哪些不兼容之处 我所说的超集是指源代码向后兼容性 即 您可以获取一个 Java 文件并将其编译为 Groovy 源文件 并且它会像
  • 如何使 相同的高度

    我试图将一个元素放在一个元素的左侧 但是我似乎无法使它们具有相同的高度并彼此对齐 跨度似乎总是定位得稍高一些 有人有什么想法吗 闪闪发光 编辑 HTML 部分
  • 未找到 Gradle DSL 方法:“multiDexEnabled()”

    我遵循了 multidex 指南https developer android com tools building multidex html 但我收到这个错误未找到 Gradle DSL 方法 multiDexEnabled 我更新了
  • Response.WriteFile -- 写出字节流

    是否可以使用 Response Write WriteFile 从动态创建的位图写入 http 响应流 而不将图像保存到硬盘驱动器 您可以使用MemoryStream并将其分配给Response OutputStream 或者简单地使用Re
  • 如何通过.properties文件使@RequestParam可配置?

    我们如何通过 properties 文件进行以下配置 RequestParam value page required false defaultValue 0 Integer page RequestParam value size re
  • F#:如何使用 SQL 数据源创建 Deedle Frame

    我试图找出当数据来自 SQL 服务器时 在 F 中创建 Deedle 框架的最佳方法是什么 我尝试过类似以下的事情 I packages Deedle 0 9 12 load Deedle fsx r System dll r System
  • C# 注册表 SetValue 抛出 UnauthorizedAccessException

    在你尝试用 快速谷歌搜索 来回答这个问题之前 我想指出的是我已经这样做了 这是情况 我有以下方法尝试修改注册表项值 我遇到的问题是 执行时 它会抛出 UnauthorizedAccessException即使我已经将密钥打开为可写 我以管理
  • spring javaconfig、xml配置和注解之间的性能差异

    我们的 Spring 配置包含大约 1200 个 bean 并且我们使用 component scan Autowired 如果我们将 ApplicationContext 导出为 Xml 并且仍然使用 Autowired 我们可以节省大约
  • 带有 Bower 支持的 Webpack

    我想加载最好的节点包 并且仅当不存在时才加载 Bower 包 我只会按照 Webpack 站点中的建议使用节点包 但我需要加载一个位于 Bower 中的库 https github com Stamplay stamplay js sdk和
  • 计算经纬度坐标的中点

    有谁知道获得一对纬度和经度点的中点的最佳方法 我使用 d3 js 在地图上绘制点 需要在两点之间绘制一条曲线 因此我需要创建一个中点来在线条中绘制曲线 请参阅下图以更好地理解我正在尝试做的事情 对长脚本表示歉意 画东西看起来很有趣 我已经划
  • 在 GitHub 上指定备用项目级 README.md

    使用 GitHub 的基于 Web 的界面 我无法弄清楚如何为项目的 README 文件指定备用路径 文件名 创建新的自述文件时 Web 界面确实提供了使用我想要的任意路径或文件名的选项 但我选择的文件不会用作项目级自述文件 我希望当用户访
  • 获得 (omniauth-facebook) 和 (omniauth-twitter) 工作

    我在用着 Ruby on Rails 4 设计3 0 3 全方位认证 1 1 4 omn iauth facebook 1 4 1 omn iauth twitter 1 0 0 我最近设置了我的omniauth facebook一切正常
  • 如何将 Proguard 混淆集成到我的 JavaFX 的 IntelliJ 工件中?

    我正在使用 IntelliJ IDEA 作为 IDE 开发 JavaFX 应用程序 到目前为止 一切都运行顺利 我已经配置了所有外部库并且正确创建了我的 JavaFX 工件 现在我想在创建工件时集成混淆 使用 Proguard Intell
  • 没有BOM的UTF-8 html显示奇怪的字符

    我有一些 HTML 其中包含一些外来字符 HTML 文档保存为无 BOM 的 UTF 8 当我在浏览器中查看页面时 外来字符似乎被奇怪的字符组合 所取代 只有当我将 HTML 文档保存为带有 BOM 的 UTF 8 时 字符才能正确显示 我
  • 追踪 Android 中的内存/窗口泄漏?

    Android开发中如何追踪内存泄漏 我正在使用 eclipse IDE 来开发该应用程序 我不知道如何纠正内存或窗口泄漏异常 任何想法 主要是窗口泄漏错误引发非法参数异常 如何纠正这两个问题 请帮忙 如果你真的想知道如何跟踪一般的内存泄漏
  • 如何使用 postgresql 在 sqlalchemy 中显式转换数组文字的类型?

    在尝试通过cast type coerce和type 来转换文字数组类型并且没有成功之后 我想我会问 from pprint import pprint from sqlalchemy import String null Integer