mariadb、python read\u sql\u表、utf8 bin

c2e8gylq  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(369)

我使用mariadb服务器,尝试连接数据并将其放入python中的pandasDataframe中。
mariadb如下所示:

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

和table在一起 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用户进行查询。。从历史中选择;我得到了正确的数据。我试图补充

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)

我可以对我感兴趣的每一个专栏都这样做,而不是把它添加到一个新的df中,但我想一定有更好的方法。你能帮助我吗?
编辑
我有以下选择:

print(data['VALUE'])

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

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


最后一个,是我瞄准的df。我试过了

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

什么都不做。我正在运行pandas 0.23.4和sqlalchemy 1.2.12
费边

biswetbf

biswetbf1#

我的系统运行在vmubuntu18.04 lts上。我现在已经使用anaconda和python3.6切换到windows,没有这样的问题。我第一次得到正确的值。
费边

相关问题