Python psycopg2错误vars函数[英] Python psycopg2 error vars function

本文是小编为大家收集整理的关于Python psycopg2错误vars函数的处理方法,想解了Python psycopg2错误vars函数的问题怎么解决?Python psycopg2错误vars函数问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有一段代码在服务器上运行良好,但在其他服务器(Linux 服务器)上运行不正常

import psycopg2,psycopg2.extras
conn = psycopg2.connect("host=xx.x.x.x dbname=dev user=user password=pass" )
parentId='272'
dbCur = conn.cursor(cursor_factory=psycopg2.extras.NamedTupleCursor)
dbCur.execute('select * from "treeItem" where "parentId" = %s order by "order"',(parentId,))
for row in dbCur:
    print type(row)
    print row.__dict__
    vars(row)
dbCur.close()
conn.close()

服务器错误的输出是:

class 'psycopg2.extras.Record'
Traceback (most recent call last):
  File "test1.py", line 8, in <module>
    print row.__dict__
AttributeError: 'Record' object has no attribute '__dict__'

但它可以在其他服务器上正常工作.python (2.7) 和 psycopg2 2.5 的相同版本

类 psycopg2.extras.Record 如何在环境中而不是在其他环境中具有 __dict__ ?

编辑
使用 python 2.7.3 和 psycopg2 2.5 (dt dec pq3 ext)
不要在 python 2.7.5 psycopg2 2.5.1 (dt dec pq3 ext) 上工作

推荐答案

您正在使用 psycopg2.extras.NamedTupleCursor,它会生成使用 collections.namedtuple() 类工厂.这些类使用 __slots__ 来限制它们的内存使用.

通常,具有 __slots__ 的类没有 __dict__ 属性.但是,在 Python 2.7.3 中添加了一个 __dict__ 属性(参见 revision 26d5f022eb1a),专门支持 vars() 使用.A 后来的变化 再次从 Python 2.7.5 中删除了支持,然后是 为 Python 2.7.6 阅读.该属性充当代理,调用 namedtuple._asdict() 以生成 OrderedDict 对象.

您有一个没有该属性的 Python 2.7.x 版本;例如2.7、2.7.1、2.7.2 或 2.7.5 之一.您可以通过调用 namedtuple._asdict() 方法来解决此问题 改为:

for row in dbCur:
    print type(row)
    print row._asdict()

本文地址:https://www.itbaoku.cn/post/1764152.html