MariaDB,Python read_sql_table,utf8-bin

时间:2018-10-25 23:31:18

标签: python mysql pandas sqlalchemy mariadb

我已经去了MariaDB服务器,尝试连接并使用python将数据获取到熊猫数据框中。

MariaDB如下所示:

html {
    opacity: 0;
    transition: opacity 1s;
}

html.light, html.dark {
    opacity: 1;
}

具有表CREATE DATABASE `fhem` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; current

history

我可以在python中成功连接

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));

数据框具有正确的标头:

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)

但是单元格的格式不正确。它们看起来像

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

,并且应该类似于

[50, 50, 46, 51]

如果我在终端中使用 mysql -u用户.. SELCET *从历史记录中进行查询; 我会获得正确的数据。 我尝试添加

"on" or "off"

但是那也没有帮助。正确显示的唯一列是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

我可以对我感兴趣的每个列执行此操作,而不是将其添加到新的df中,但是我想必须有更好的方法。你能帮我吗?

编辑

我有以下选择:

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

enter image description here

print(data['VALUE'])

enter image description here

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

This is how it should look

最后一个是我要针对的df。 我尝试过

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

不执行任何操作。 我在熊猫0.23.4和sqlalchemy 1.2.12上运行

Fabian

1 个答案:

答案 0 :(得分:0)

我的系统在VM Ubuntu 18.04 LTS上运行。我现在已经切换到Windows和Anaconda和Python 3.6,并且没有这样的问题。我第一次得到正确的值。

Fabian