#python #mysql #type-conversion #pymysql
#python #mysql #преобразование типа #pymysql
Вопрос:
Я использую pymysql==0.10.1
(python3.7) для чтения таблицы с битовым столбцом и получения неправильных значений:
CREATE TABLE root.numeric
(BIT_COL BIT(10));
insert into root.numeric
values (b'0010001000');
insert into root.numeric
values (b'0000100000');
и затем
with connection.cursor() as cursor:
sql = f"select * from `root`.`numeric`;"
cursor.execute(sql)
result = cursor.fetchone()
print("mysql payload", result)
получение:
mysql payload {'BIT_COL': b'x00x88'} # nice
mysql payload {'BIT_COL': b'x00 '}. # not nice
почему это? Я проверил, и похоже, что код pymysql ничего не преобразует для битовых полей.
Ответ №1:
как упоминалось в коде «MySQLdb не обрабатывает биты, поэтому мы тоже не должны», поэтому правильное преобразование:
def convert_bit(self, b):
""" bit fields are packed as big-endian unsigned long long,
we translate them to human-readable int/long"""
b = b"x00" * (8 - len(b)) b # pad w/ zeroes
return struct.unpack(">Q", b)[0]