2015-08-26 23 views
7

Tôi có một dataframe gấu trúc Tôi nạp qua read_csv mà tôi đang cố gắng để đẩy đến một cơ sở dữ liệu thông qua to_sql khi tôi cố gắnggấu trúc to_sql cho unicode decode lỗi

df.to_sql("assessmentinfo_pivot", util.ENGINE) 

tôi nhận lại một unicodeDecodeError:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 83-84: ordinal not in range(128) 

không có tùy chọn mã hóa cho to_sql để xác định utf-8 cho to_sql và Engine đã được tạo ra với mã hóa thiết lập để utf-8

ENGINE = create_engine("mssql+pymssql://" + 
         config.get_local('CEDS_USERNAME') + ':' + 
         config.get_local('CEDS_PASSWORD') + '@' + 
         config.get_local('CEDS_SERVER') + '/' + 
         config.get_local('CEDS_DATABASE'), 
         encoding="utf-8") 

Bất kỳ thông tin chi tiết về gấu trúc nào về việc làm việc này đúng cách? hầu hết tìm kiếm của tôi đều dẫn tôi đến những người có lỗi tương tự với to_csv, điều này chỉ được giải quyết bằng cách thêm mã hóa = "utf-8" nhưng tiếc là không phải là một tùy chọn ở đây.

tôi đã cố gắng gọt file xuống nhưng nó vẫn mang lại cho lỗi ngay cả khi lột xuống chỉ tiêu đề: http://pastebin.com/F362xGyP

+0

Bạn có thể cung cấp ví dụ sao chép không? (một số dữ liệu ví dụ và mã tái tạo lỗi) – joris

+0

Lỗi xảy ra chỉ với các tiêu đề mà tôi đã đặt trong một pastebin ở trên. các cột có một số tên dài do một số trục được thực hiện cho bảng nguồn – lathomas64

+0

Có một số ký tự đặc biệt ³ từ một số tên nguồn dữ liệu tiếng Tây Ban Nha kết thúc ở đây khi cố gắng tạo bảng tổng hợp. Tôi muốn có thể xử lý điều này trong cuộc gọi to_sql như trái ngược với việc phải tách các ký tự khỏi các tiêu đề. – lathomas64

Trả lời

7

tôi có kinh nghiệm vấn đề chính xác cùng với sự kết hợp pymysql và pandas.to_sql

Cập nhật , đây là những gì làm việc cho tôi:

Thay vì đi qua các charset như một cuộc tranh cãi, hãy thử gắn nó trực tiếp vào chuỗi kết nối:

connect_string = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(DB_USER, DB_PASS, DB_HOST, DB_PORT, DATABASE)

Sự cố dường như xảy ra trong pymysql và nguyên nhân gây ra lỗi dường như là mã hóa bạn xác định không được chuyển tiếp đúng và đặt khi kết nối pymsql được đặt.

Vì lợi ích của gỡ lỗi, tôi harcoded

encoding = 'utf-8

trong hàm pymysql _do_execute_many và giải thích nó cho tôi.

0

Tôi đã giải quyết vấn đề thay đổi bộ ký tự trong cơ sở dữ liệu MySQL (UTF-8) và thêm vào kết nối pymysql: charset='utf8'.

Các vấn đề liên quan