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

时间:2016-01-27 09:55:31

标签: python python-2.7 psycopg2 psql

我有一个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'

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

2 个答案:

答案 0 :(得分:2)

你可以" hack" psycopg2cffi的解析器将DATE对象作为字符串返回:

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

import psycopg2cffi

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

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

答案 1 :(得分:0)

将您的psql查询更改为强制转换并将日期列作为字符串

e.g。从table_name中选择date_column_name :: to_char。