У меня есть таблица mysql со следующей схемой и таблицей.
CREATE SCHEMA IF NOT EXISTS test DEFAULT CHARACTER SET utf8;
USE test;
CREATE TABLE IF NOT EXISTS test.test_table (
_id_pn INTEGER NOT NULL AUTO_INCREMENT,
_element TEXT CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci' NOT NULL,
PRIMARY KEY (_id_pn)) ENGINE = InnoDB;
Я использую python-соединитель mysql для подключения к базе данных и выполнения запросов следующим образом.
import mysql.connector
MYSQL_CONFIG = {
'autocommit': True,
'ssl_disabled': True,
'host': '127.0.0.1',
'port': 3307,
'user': 'root',
'password': 'toor',
'pool_size': 1,
'database': 'test'
}
def insert_into_table(cursor, element):
cursor.execute("INSERT INTO test_table (_element) values (%s)", (element,))
def print_table_values(cursor):
cursor.execute("SELECT _element from test_table")
for row in cursor:
print(row['_element'])
print(type(row['_element']))
def print_table_values_raw_cursor(cursor):
cursor.execute("SELECT _element from test_table")
for (elem,) in cursor:
decoded_elem = elem.decode('utf-8')
print(decoded_elem)
print(type(decoded_elem))
cnx = mysql.connector.connect(**MYSQL_CONFIG)
cursor = cnx.cursor(buffered=True, dictionary=True)
insert_into_table(cursor, "000001")
print_table_values(cursor)
cursor2 = cnx.cursor(buffered=True, raw=True)
print_table_values_raw_cursor(cursor2)
cursor.close()
cursor2.close()
cnx.close()
Результат выполнения этого кода:
1
<type 'int'>
000001
<type 'unicode'>
Кто-нибудь может объяснить причину, по которой код ведет себя так? Кроме того, полезно ли использовать необработанный курсор и вручную декодировать значения?
Версия Python = 2.7.10
Версия Python-коннектора mysql = 8.0.16
Версия сервера Mysql =5.6.44-log MySQL Community Server (GPL)