sqlite3.ProgrammingError: Вы не должны использовать 8-битные строки байтов - PullRequest
0 голосов
/ 03 февраля 2020

Я использую следующий скрипт для загрузки CSV-файлов в базу данных SQLite. Этот сценарий хорошо работает для меня, но не работает для моих коллег, которые получают следующее сообщение об ошибке: sqlite3.ProgrammingError: Вы не должны использовать 8-битные строки байтов, если вы не используете text_factory, которая может интерпретировать 8-битные строки байтов (например, text_factory = str).

Все используют Python 3.7. Единственное отличие состоит в том, что мой компьютер настроен на английском языке, а их на французском. Я знаю, что есть сообщения об этой ошибке, но пока ничего не получалось, включая использование io.open.

Мысли?

import sqlite3
from sqlite3 import Error
import glob
import csv
import os
import io

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
my_db = os.path.join(BASE_DIR, 'pythontest\\db.sqlite3')

extension = 'csv'
my_files = os.path.join(BASE_DIR, 'pythontest\\ref_tables')
os.chdir(my_files)
import_files = glob.glob('*.{}'.format(extension))

# Then load reference tables
def load_reference_tables():
    sqlite_connection = None
    try:
        sqlite_connection = sqlite3.connect(my_db)
        cursor = sqlite_connection.cursor()
        print("Connected to SQLite")
    except Error as e:
        print('Failed to connect to database', e)

    for filename in import_files:
        with open(filename, "r") as f:
            data = csv.DictReader(f)
            cols = data.fieldnames
            tablename = os.path.splitext(os.path.basename(filename))[0]

            sql_str = "insert into %s values (%s)" % (tablename, ','.join(["?" for col in cols]))
            cursor.executemany(sql_str, (list(map(row.get, cols)) for row in data)),

            sqlite_connection.commit()
    print("Tables updated successfully ")
    sqlite_connection.close()

load_reference_tables()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...