Python+;psycopg:type';23';事实上为列';双精度';在postgresql数据库中

Python+;psycopg:type';23';事实上为列';双精度';在postgresql数据库中,python,postgresql,psycopg2,Python,Postgresql,Psycopg2,我在python中使用psycopg2访问postgresql数据库 我首先使用fetchall收集行: rows=cur.fetchall() 然后,对于每一行,我将类型从postgresql格式修改为python格式: for row in rows: rec={} for k in range(len(row)): print k rec[columns[k]]=PGData2PY(row[k],str(types[k])) rtn

我在python中使用psycopg2访问postgresql数据库

我首先使用fetchall收集行:

rows=cur.fetchall()
然后,对于每一行,我将类型从postgresql格式修改为python格式:

for row in rows:
    rec={}
    for k in range(len(row)):
        print k
        rec[columns[k]]=PGData2PY(row[k],str(types[k]))
    rtn.append(rec)

def PGData2PY(d,t):
    """
    translate pgdb data to python data 
    params: d: data; t: data description
    return python data
    """
    if t == 'text':
        return str(d)
    elif...
    else:
        print t
    return d
我刚刚收到一个类型t=23,实际上它应该是我的postgresql数据库中的“双精度”列。这里的特定值对应于数据库中的一个整数


为什么它会打印t=23而不是t=‘双精度’或类似的东西?

最后,不需要创建PGData2PY函数。简单的

for row in rows:
    rec={}
    for k in range(len(row)):
        print k
        rec[columns[k]]=row[k]
    rtn.append(rec)

有效。

我不明白您在这里想做什么:psycopg2为您将类型从PostgreSQL转换为Python。不需要自己做转换。直到最近我还在使用pgdb,我觉得我必须自己做…psycopg2中的等效代码是什么?只需使用数据。类型总是正确的。