psycopg2.DataError:用于编码“UTF8”的无效字节序列:0x00

时间:2015-09-03 08:21:44

标签: python postgresql psycopg2

我在python 3.4中有一些批量postgresql 9.3.9数据插入。我一直在使用SQLAlchemy,它适用于正常的数据处理。有一段时间我一直在使用psycopg2,以便利用copy_from函数,我发现在批量插入时更快。我遇到的问题是,当使用copy_from时,如果我的数据中包含一些special个字符,则批量插入会失败。当我删除突出显示的行时,插入成功运行。

错误

Traceback (most recent call last):
  File "/vagrant/apps/data_script/data_update.py", line 1081, 
  in copy_data_to_db
    'surname', 'other_name', 'reference_number', 'balance'), sep="|", null='None')
psycopg2.DataError: invalid byte sequence for encoding "UTF8": 0x00
CONTEXT:  
COPY source_file_raw, line 98: "94|1|99|2015-09-03 10:17:34|False|True|John|Doe|A005-001\008020-01||||||..."

产生错误的代码

cursor.copy_from(data_list, 'source_file_raw', 
columns=('id', 'partner_id', 'pos_row', 'loaded_at', 'has_error', 
         'can_be_loaded', 'surname', 'other_name', 'reference_number', .............), 
         sep="|", null='None')

数据库连接

    import psycopg2
    pg_conn_string = "host='%s' port='%s' dbname='%s' user='%s' password='%s'" 
    %(con_host, con_port, con_db, con_user, con_pass)
    conn = psycopg2.connect(pg_conn_string)
    conn.set_isolation_level(0)
    if cursor_type == 'dict':
        cursor = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
    else:
        cursor = conn.cursor()
    return cursor

令人费解的是,即使存在那些“特殊字符”但是使用psycopg2直接失败,SQlAlchemy也可以进行批量插入。我认为必须有一种方法让我逃避这个或告诉psycopg2找到一个聪明的方法来插入或我错过了某个地方的设置?

0 个答案:

没有答案