UnicodeEncodeError: кодек 'latin-1' не может закодировать символ u '\ u05a0' в позиции 85: порядковый номер не в диапазоне (256) - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь ввести файл формата json в свою базу данных.У меня есть некоторые значения Unicode в моем формате json.
для справки об ошибке Unicode, пожалуйста, смотрите эту ссылку: Получение ошибки Unicode при использовании оператора вставки

, которую я решил с помощью кодеков Описание для кодеков и решения, предоставленного вышеупомянутым решением.

Но теперь, когда я выполняю оператор вставки, в качестве заголовка я получаю ошибку.

Мой код Pythonвыглядит так:

import MySQLdb
import json



db = MySQLdb.connect(host="localhost",    # your host, usually localhost
                 user="root",         # your username
                 passwd="password",  # your password
                 db="Mydb",)        # name of the data base


cursor = db.cursor()
json_file = open('asda.txt', 'r' )
file_data = json.load(json_file)
print(file_data)
print(type(file_data))

datas = file_data['datads']
print(datas)
for data in datas:
       print(data)
       print()
       print(data['first_col'])
       ex_statement = u"INSERT INTO `tablename` (`id`, `xv`) VALUES ( {id '"+unicode(data['first_col'])+ u"'}, {xv  '"+unicode(data['second_col'])+u"'});"
       #ex_statement = "Insert into `tablename` values {first_col '"+str(data['first_col'])+"'}, {second_col  '"+str(data['second_col'])+"'});"
       cursor.execute(ex_statement)
       cursor.commit()

db.close()

Мой файл Json выглядит так:

{"datads" :[{
     "first_col" : "SoomeVAlue_1",
     "second_col" : "SomeValue_1_1"
},
 {
     "first_col" : " Unicode_Start ֠  Unicode_End",
     "second_col" : "SomeValue_2_2"
},
{
     "first_col" : null ,
     "second_col" : "SomeValue_2_2"
}
]}

Моя таблица выглядит следующим образом: Изображение базы данных

И после выполнения файлаЯ получаю сообщение об ошибке:

{u'datads': [{u'first_col': u'SoomeVAlue_1', u'second_col': u'SomeValue_1_1'}, {u'first_col': u' Unicode_Start \u05a0  Unicode_End', u'second_col': u'SomeValue_2_2'}, {u'first_col': None, u'second_col': u'SomeValue_2_2'}]}
<type 'dict'>
[{u'first_col': u'SoomeVAlue_1', u'second_col': u'SomeValue_1_1'}, {u'first_col': u' Unicode_Start \u05a0  Unicode_End', u'second_col': u'SomeValue_2_2'}, {u'first_col': None, u'second_col': u'SomeValue_2_2'}]
{u'first_col': u'SoomeVAlue_1', u'second_col': u'SomeValue_1_1'}
()
SoomeVAlue_1
{u'first_col': u' Unicode_Start \u05a0  Unicode_End', u'second_col': u'SomeValue_2_2'}
()
 Unicode_Start ֠  Unicode_End
Traceback (most recent call last):
  File "abc.py", line 35, in <module>
    cursor.execute(ex_statement)
  File "/usr/local/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 188, in execute
    query = query.encode(db.encoding)




UnicodeEncodeError: 'latin-1' codec can't encode character u'\u05a0' in position 85: ordinal not in range(256)

Пожалуйста, помогите мне с этой ошибкой.

1 Ответ

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

Ошибка говорит о том, что ваше соединение с базой данных использует Latin1 (db.encoding это 'latin1' внутри ... / MySQLdb / cursors.py). MySQLdb объявите, что он принимает параметр charset, поэтому вы должны попробовать:

db = MySQLdb.connect(host="localhost",    # your host, usually localhost
                 user="root",         # your username
                 passwd="password",  # your password
                 db="Mydb",          # name of the data base
                 charset="utf-8",)   # charset for the connection

Если этого все еще недостаточно, вам может потребоваться перейти на версию Python 3 вместе с более новым соединителем, таким как mysql-connector-python , который поддерживает Python3. Поскольку Python3 изначально поддерживает Unicode, у вас больше не должно быть проблем с конвертацией.

...