2017-07-30 19 views
0

我想加載一個CSV到一個SQLite。我的CSV包含utf-8字符,如(é,à,ü,♀...)。CSV到sqlite與uft-8

這些字符在我的sqlite中顯示爲’é。我已經使用con.text_factory = str但它不會改變任何東西。

我自己也嘗試.decode('utf8')因爲這question建議,但我得到的錯誤:'str' object has no attribute 'decode'

import sqlite3 
import csv 
import os 

db= "mydb.sqlite" 

con = sqlite3.connect(db) 
con.text_factory = str # allows utf-8 data to be stored 
cursor = con.cursor() 

csvfile= 'mycsv.csv' 
tablename = os.path.splitext(os.path.basename(csvfile))[0] 


with open (csvfile, 'r') as f: 
    reader = csv.reader(f) 
    header_line_from_csv = next(reader) 
    columns = [h.strip() for h in header_line_from_csv] #Strips white space in header 

    headers= ', '.join([f'{column} text' for column in columns]) ## 
    sql = f'CREATE TABLE {tablename} ({headers})' 
    print (sql) 
    cursor.execute(sql) 


    query = 'insert into {0}({1}) values ({2})' 
    query = query.format(tablename, ','.join(columns), ','.join('?' * len(columns))) 
    print(query) 
    cursor = con.cursor() 
    for row in reader: 
     cursor.execute(query, row) 
    con.commit() 


    print(cursor.rowcount) 

    cursor.execute(f"SELECT * FROM {tablename}") 
    print("fetchall:\n",cursor.fetchall()) 
    print(cursor.description) 
    con.close() 

回答

1

你可以在開始加入這一行:

# -*- coding:utf-8 -*- 

,以保證您的腳本將使用此編碼。試着用utf-8編碼打開csv文件:

with open (csvfile, 'r', encoding='utf-8') as f: