TDengine在Python下的实践

环境

操作系统:windows10
IDE:Pycharm2020
python版本:Pyhon3.6.6
TD-server:docker-win-Tdengine.2.1.0.0
TD-client:TD-client-2.1.0.0-win

准备

1.安装Docker、下载TDengine镜像
官网教程:https://www.taosdata.com/cn/documentation/getting-started/docker
2.安装TDclient-win,并进入C:\TDengine\connector\python\windows\python3
安装taos三方库

pip install ./

3.下载TDengineGUI

https://gitee.com/skyebaobao/TDengineGUI/releases/v1.0.0

踩坑点
1.在 Docker 容器中运行 TDengine,不要按官网案例下拉运行镜像,按需添加自己的配置参数,开放如下端口,开启重启自启动

docker run -d --hostname="jimmy" --name tdengine -p 6030-6042:6030-6042 -p 6030-6042:6030-6042/udp tdengine/tdengine --restart=always

2.容器Linux环境时区修改

apt-get install tzdata
tzselect

使用

1.使用docker-Desktop 进入容器交互终端,或打开终端,输入:

docker exec -it container_id /bin/bash

2.使用taos前先修改配置!

vim /etc/taos/taos.cfg
# taos.cfg
numOfThreadsPerCore       2.0
ratioOfQueryCores        2.0
# 预写日志等级,默认为1时,间隔插入大量实时数据时会报错
walLevel              0  
maxSQLLength          1048576

3.进入taos客户端:

taos

4.设置root密码:

alter user root pass '123456';

5.创建数据库(可使用GUI创建,点击修改配置)

create database test;

GUI:
在这里插入图片描述

模型

class Equipment(Base):
    __tablename__ = 'equipments'

    id = Column(Integer, primary_key=True)
    Equip_name = Column(VARCHAR(255), nullable=False, comment='设备表')
    Group_id = Column(Integer, nullable=False, comment='组id')
    Equip_id = Column(Integer, nullable=False, comment='设备id')

class Tag(Base):
    __tablename__ = 'tags'

    id = Column(Integer, primary_key=True)
    Tag_name = Column(String(255), nullable=False, comment='标签名称')
    Equip_id = Column(Integer, nullable=False, comment='设备id')

插入实时数据

import taos
import redis
import time
import datetime
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from models import Tag, Equipment
from apscheduler.schedulers.blocking import BlockingScheduler

# 初始化数据库连接:
engine = create_engine('mysql+mysqlconnector://root:123456@192.168.2.11:3306/test')
# 创建DBSession类型:
DBSession = sessionmaker(bind=engine)
# 创建session对象:
session = DBSession()
# 查询所有设备id
equipments_id = session.query(Equipment.Equip_id).all()

def job():
    # redis连接池
    pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)
    r = redis.Redis(connection_pool=pool)
    # 连接TDengine
    conn = taos.connect(host='jimmy', user='root', password='123456', database='test')
    # 建立游标
    cursor = conn.cursor()
    # 取redis数据
    data = r.hgetall('data_test')
    # 时间戳生成
    t = time.time()
    timestamp = str(int(round(t * 1000)))
    # SQL拼接
    SQL = 'insert into'
    for equip_id in equipments_id:
        SQL += ' equip_' + str(equip_id[0]) + ' values (' + timestamp
        equip_tags = session.query(Tag.Tag_name).filter_by(Equip_id=equip_id[0]).all()
        session.close()
        for tag in equip_tags:
            tag_value = data[tag[0]]
            SQL += ',' + tag_value
        SQL += ')\n'
    SQL += ';'

    print('开始插入:', datetime.datetime.now())
    try:
        cursor.execute(SQL)
        print('插入完成:', datetime.datetime.now())
        return
    except Exception as err:
        conn.close()
        raise (err)


scheduler = BlockingScheduler()
scheduler.add_job(job, 'interval', seconds=3)
scheduler.start()

在这里插入图片描述

数据导出

taosdump -o ./dump/all_table -u root -p 123456 -D test -t 500 -B 100 -T 12 -S 1678900000

Docker容器内数据导出\导入

docker cp /root/xxx/xxx C:\xxx\xxx
docker cp C:\xxx\xxx  wdsfw2e2rwd:/root/xxx

后记

  1. centos7安装后taosd.service文件空
[Unit]
Description=TDengine server service
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/usr/bin/taosd
ExecStartPre=/usr/local/taos/bin/startPre.sh
TimeoutStopSec=1000000s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=0
StandardOutput=null
Restart=always
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.target

systemctl daemon-reload重新加载

版权声明:本文为qq_40582266原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。