我有一个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'
有没有办法告诉施法者忽略这个错误并将其解析为字符串而不是整个批处理失败?
答案 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。