Я читаю файл построчно, сохраняю данные, которые мне нужны, в переменных, а затем передаю их в операторе вставки для сохранения их в моей базе данных строка за строкой.Когда программа попадает на смайлик Юникод, mysql проходит через следующее исключение:
Traceback (most recent call last):
File "import_json.py", line 73, in <module>
crs.execute(ins_statement,parameters)
File "/venv/lib/python3.4/site-packages/MySQLdb/cursors.py", line 250, in execute
self.errorhandler(self, exc, value)
File "/venv/lib/python3.4/site-packages/MySQLdb/connections.py", line 50, in defaulterrorhandler
raise errorvalue
File "/venv/lib/python3.4/site-packages/MySQLdb/cursors.py", line 247, in execute
res = self._query(query)
File "/venv/lib/python3.4/site-packages/MySQLdb/cursors.py", line 411, in _query
rowcount = self._do_query(q)
File "/venv/lib/python3.4/site-packages/MySQLdb/cursors.py", line 374, in _do_query
db.query(q)
File "/venv/lib/python3.4/site-packages/MySQLdb/connections.py", line 277, in query
_mysql.connection.query(self, query)
_mysql_exceptions.OperationalError: (1366, "Incorrect string value: '\\xF0\\x9F\\x87\\xB5\\xF0\\x9F...' for column 'primary_geo' at row 1")
До сих пор я столкнулся с несколькими проблемами с кодировкой, и я решил их, настроив кодировку mysqls на utf8mb4
следующим образом:
+--------------------------+--------------------+
| Variable_name | Value |
+--------------------------+--------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| collation_connection | utf8mb4_unicode_ci |
| collation_database | utf8mb4_general_ci |
| collation_server | utf8mb4_unicode_ci |
+--------------------------+--------------------+
, а также добавлено в мой код:
conn.set_character_set('utf8')
cursor.execute('SET NAMES utf8;')
cursor.execute('SET CHARACTER SET utf8;')
cursor.execute('SET character_set_connection=utf8;')
Однако появляются такие вещи, как смайлики Unicode, и кто знает, что еще произойдет при импорте и разборе миллионов строк,Поэтому я хотел бы разрешить cursor.execute(insert_stmnt)
добавить все правильные строки и игнорировать ошибочные, поскольку мне нужно только сохранить образец моих необработанных данных.
Я пытался:
` try:
crs.execute(insert_stmnt,args)
except (MySQLdb.Error):
continue`
но это просто завершает программу, ничего не записывая в мою базу данных.