SqLite3: вставка текста в текстовый столбец дает двоичные данные с Python - PullRequest
0 голосов
/ 02 ноября 2018

Здравствуйте и спасибо за то, что нажали на этот вопрос. Я хочу вставить в базу данных содержимое текстового файла с кодировкой utf-8. Продолжая вставлять текстовое содержимое в БД, он говорит мне, что это бинарные данные по какой-то причине. Когда я создал БД в sqlite3, я указал, что описание (рассматриваемый столбец) должно быть ТЕКСТОМ, поэтому я не знаю, в чем может быть проблема ...

Код следующий [он содержит только часть, куда я вставляю в БД]: (краткое описание кода: он просматривает папку со многими текстовыми файлами, а затем собирает некоторые переменные из имени и содержимого текста, а затем, если текст не был добавлен в БД, добавьте новую строку, содержащую отсутствуют переменные, соответствующие текстовому файлу)

def put_inside_db():
    counter = 0
    for item in list_txt:
        item_components = item.split("-")
        item_year = item_components[-1].split(".")
        unique_key = str(item_components[0]) + str(item_year[0])
        cik = item_components[0]
        comp_name = item_components[1]
        year = item_year[0]
        file_path = path_to_10k + item
        file = open(file_path, "r+", encoding="utf-8")
        description = file.read()
        description = str(description)
        print(description)
        file.close()
        if unique_key not in keys_db:
            c.execute("INSERT INTO finaldata (cik, comp_name, year, unique_key, description) "
                     "VALUES(?,?,?,?,?)", (cik, comp_name, year, unique_key, description))
            print("This key is not inside: " + unique_key)
            counter += 1
        else:
            "do nothing"
            # print("This key is inside: " + unique_key)
        if counter % 50 == 0:
            conn.commit()
    conn.commit()

Я даже напечатал на консоли внутренние части текстовых файлов, и они являются строками, поэтому я не знаю, почему эта проблема присутствует. Ниже вы можете увидеть сообщение, которое отображает БД, когда я нажимаю на значение из столбца «описание» enter image description here

UPDATE

Я пытался реализовать решение из другого вопроса, на который был дан ответ Форсирование типа данных (BLOB или TEXT) при вставке значений в таблицу SQLite . Это значит, что я сделал следующее:

1) Попытка исправить значения в базе данных, переписав их согласно решению номер один, но это не решило мою проблему

2) Другое предложение из другого поста состояло в том, что я должен убедиться, что я вставляю текстовые значения в БД. Насколько мне известно, значения, которые я пытаюсь вставить в БД, являются строками. Чтобы убедиться, что я даже заставил извлеченное описание из текстовых файлов быть строкой. Однако это не решает мою проблему ..

Поэтому, на мой взгляд, я считаю, что мой вопрос не является дубликатом, поскольку я вставляю строки в столбец со сродством к тексту и сохраняет его в двоичном виде. Если я ошибаюсь, может кто-нибудь объяснить более подробно, что именно происходит и почему я получаю этот результат. Я использовал подобный код для других вставок базы данных, но я никогда не получал такую ​​ошибку ...

Спасибо!

1 Ответ

0 голосов
/ 11 апреля 2019

Благодаря https://stackoverflow.com/users/570339/ramy-al-zuhouri а также sqlite для swift нестабильно

sqlite3_bind_int(statement, 1, Int32(id))
sqlite3_bind_text(statement, 2,(type as NSString).UTF8String, -1, nil)

let desc = (description ?? "") as NSString
sqlite3_bind_text(statement, 3, desc.UTF8String, -1, nil)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...