python – 在cursor.fetchall()期间的psql强制解析错误

我有一个python代码,它查询psql并使用cursor.fetchall()返回一批结果.
由于数据库中的数据不正确,如果转换失败,它会抛出异常并导致进程失败.
我得到这个例外:

文件“/usr/local/lib/python2.7/site-packages/psycopg2cffi/_impl/cursor.py”,第377行,在fetchall中
    返回[self._build_row()for _ in xrange(size)]
  在_build_row中输入文件“/usr/local/lib/python2.7/site-packages/psycopg2cffi/_impl/cursor.py”,第891行
    self._casts [i],val,length,self)
  类型文件“/usr/local/lib/python2.7/site-packages/psycopg2cffi/_impl/typecasts.py”,第71行
    return caster.cast(value,cursor,length)
  文件“/usr/local/lib/python2.7/site-packages/psycopg2cffi/_impl/typecasts.py”,第39行,演员表
    return self.caster(value,length,cursor)
  在parse_date中输入文件“/usr/local/lib/python2.7/site-packages/psycopg2cffi/_impl/typecasts.py”,第311行
    引发DataError(“bad datetime:’%s’”%bytes_to_ascii(value))
DataError:错误的日期时间:’32014-03-03′

有没有办法告诉施法者忽略这个错误并将其解析为字符串而不是整个批处理失败?

解决方法:

您可以“破解”psycopg2cffi的解析器以将DATE对象作为字符串返回:

如果您查看code,您可以看到DATE解析器的注册,因此您可以在代码中替换DATE的序列化程序.

import psycopg2cffi

psycopg2cffi._impl.typecasts._default_type('DATE', [1082],
                                  psycopg2cffi._impl.typecasts.parse_string)

当然,对于每种类型,都可以这样做.

上一篇:python – 在不使用循环的情况下将多行插入数据库


下一篇:用客户端命令psql连接 PostgreSQL 不输入密码的方法