MariaDB, Python read_sql_table, utf8-bin - PullRequest
       6

MariaDB, Python read_sql_table, utf8-bin

0 голосов
/ 26 октября 2018

Я захожу на сервер MariaDB и пытаюсь подключиться и получить данные в pandas dataframe в python.

MariaDB выглядит следующим образом:

CREATE DATABASE `fhem` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

с таблицамиcurrent и history.

CREATE TABLE `fhem`.`history` (TIMESTAMP TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, DEVICE varchar(64), TYPE varchar(64), EVENT varchar(512), READING varchar(64), VALUE varchar(128), UNIT varchar(32));

Я могу успешно подключиться в python:

import pandas as pd
import sqlalchemy as db
engine = db.create_engine('mysql+mysqlconnector://user:pass@192.168.37.33:3306/fhem')
data = pd.read_sql_table('history', engine)

Dataframe имеет правильный заголовок:

['TIMESTAMP', 'DEVICE', 'TYPE', 'EVENT', 'READING', 'VALUE', 'UNIT']

Ноячейки не имеют правильный формат.Они выглядят как

[50, 50, 46, 51]

и должны выглядеть примерно так:

"on" or "off"

Если я выполняю запрос в терминале с mysql -u user .. SELCET * from history; Я получаю правильные данные.Я пытался добавить

engine = db.create_engine('mysql+mysqlconnector://user:pass@192.168.37.33:3306/fhem', encoding='utf8')
engine = db.create_engine('mysql+mysqlconnector://user:pass@192.168.37.33:3306/fhem?charset=utf8')

Но это тоже не помогло.Единственный столбец, который отображается правильно: TIMESTAMP.

. Я могу сделать следующее:

for l in data['VALUE'].values:
    x = l.decode('utf-8')
    print(x)

Я мог бы сделать это для каждого интересующего меня столбца, а затем добавить его вновый дф но я думаю должен быть лучший путь.Вы можете мне помочь?

РЕДАКТИРОВАТЬ

У меня есть следующие варианты:

print(data['VALUE'])

enter image description here

for l in data['VALUE']:
   print(l)

enter image description here

for l in data['VALUE']:
  print(l.decode('utf-8'))

This is how it should look

Последний, это df, к которому я стремлюсьна.Я пытался

data['VALUE'].apply(lambda x: x.decode('utf-8'))

, который ничего не делает.Я работаю на пандах 0.23.4 и sqlalchemy 1.2.12

Fabian

1 Ответ

0 голосов
/ 29 октября 2018

Моя система работала на ВМ Ubuntu 18.04 LTS.Сейчас я перешел на Windows с Anaconda и Python 3.6, и такой проблемы нет.Я получаю правильные значения в первый раз.

Fabian

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...