2016-01-27 19 views
4

我有一個python代碼,它查詢psql並使用cursor.fetchall()返回一批結果。 由於數據庫中的數據不正確,它會拋出一個異常並且在轉換失敗時失敗進程。 我得到這個異常: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

可以「砍」的psycopg2cffi解析器返回日期對象作爲字符串代替:

如果您在code看,你可以看到日期解析器的註冊,這樣你就可以在更換日期的串行你的代碼。

import psycopg2cffi 

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

當然這可以在每種類型中完成。

0

改變你的psql查詢投和獲取日期列字符串

例如從table_name中選擇date_column_name :: to_char。

+0

感謝您的快速回復!第二個解決方案是我想要做的,但'psycopg2cffi'是我正在使用的一個python庫,如果我在代碼中捕獲到異常,那麼'fetchall()'將不會完全執行一個保留空 –