我有一个python代码,它查询psql并使用cursor.fetchall()返回一批结果。
如果由于数据库中的错误数据导致强制转换失败,它将引发异常并使进程失败。
我有个例外:
File "/usr/local/lib/python2.7/site-packages/psycopg2cffi/_impl/cursor.py", line 377, in fetchall return [self._build_row() for _ in xrange(size)] File "/usr/local/lib/python2.7/site-packages/psycopg2cffi/_impl/cursor.py", line 891, in _build_row self._casts[i], val, length, self) File "/usr/local/lib/python2.7/site-packages/psycopg2cffi/_impl/typecasts.py", line 71, in typecast return caster.cast(value, cursor, length) File "/usr/local/lib/python2.7/site-packages/psycopg2cffi/_impl/typecasts.py", line 39, in cast return self.caster(value, length, cursor) File "/usr/local/lib/python2.7/site-packages/psycopg2cffi/_impl/typecasts.py", line 311, in parse_date raise DataError("bad datetime: '%s'" % bytes_to_ascii(value))DataError: bad datetime: '32014-03-03'
有没有办法告诉施法者忽略此错误并将其解析为字符串,而不是使整个批处理失败?

最佳答案

您可以“破解”psycopg2cffi的解析器,将日期对象作为字符串返回:
如果在code中查看,可以看到日期解析器的注册,因此可以替换代码中的日期序列化器。

import psycopg2cffi

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

当然,这是可以做到的,每种类型。

08-24 14:10