python连接clickhouse数据库的两种方式小结

目录
  • python连接clickhouse数据库
    • 主要针对clickhouse_driver的使用进行简要介绍
  • python将数据写入clickhouse

python连接clickhouse数据库

在Python中获取系统信息的一个好办法是使用psutil这个第三方模块。

顾名思义,psutil = process and system utilities,它不仅可以通过一两行代码实现系统监控,还可以跨平台使用。

主要针对clickhouse_driver的使用进行简要介绍

第一步:

  • 通过pip install clickhouse_driver 安装 clickhouse_driver

第二步:

  • 方法一:使用clickhouse_driver 包中的Client类,通过实例化一个客户端进行对数据库的增删改查操作
from clickhouse_driver import Client
from datetime import datetime
import psutil
host_name = '192.168.50.94'
client = Client(host=host_name,database='default',user='default',password='自己设的密码',send_receive_timeout=20,port=55666)
now = datetime.now()
time_stamp = now.strftime('%a %b %d %H:%M:%S CST %Y')# Tue Apr 06 15:32:55 CST 2021  <class 'str'>
create_at = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
disk_io = psutil.disk_io_counters()
net_io = psutil.net_io_counters()
chart_name = ["磁盘IO","网络IO"]
metric_name1 = ["读(数量)","写(数量)", "读(字节)", "写(字节)", "读(时间)", "写(时间)"]
metric_name2 = ["发送字节数","接收字节数","发送包数","接收包"]
metric_value1 = [disk_io.read_count,disk_io.write_count,disk_io.read_bytes,disk_io.write_bytes,disk_io.read_time,disk_io.write_time]
metric_value2 = [net_io.bytes_sent,net_io.bytes_recv,net_io.packets_sent,net_io.packets_recv]
try:
    for i in chart_name:
        if i is "磁盘IO":
            for j in metric_name1:
                sql = "insert into clickhouse_host_metrics777(time_stamp,host_name, chart_name, metric_name,metric_value,create_at) " \
                      "values('%s','%s','%s','%s','%s','%s')" % \
                         (time_stamp, host_name, i, j, metric_value1[metric_name1.index(j)], create_at)
                res = client.execute(sql)
        elif i is "网络IO":
            for j in metric_name2:
                sql = "insert into clickhouse_host_metrics777(time_stamp,host_name, chart_name, metric_name,metric_value,create_at) " \
                      "values('%s','%s','%s','%s','%s','%s')" % \
                      (time_stamp, host_name, i, j, metric_value2[metric_name2.index(j)], create_at)
                res = client.execute(sql)
    print("成功写入数据")
except Exception as e:
    print(str(e))
  • 方法二:使用clickhouse_driver 包中的connect函数,通过实例化一个客户端进行对数据库的增删改查操作
from datetime import datetime
import psutil
from clickhouse_driver import connect
host_name = '192.168.50.94'
#账号:密码@主机名:端口号/数据库
conn = connect('clickhouse://default:自己设的密码@'+host_name+':55666/default')
cursor = conn.cursor()
now = datetime.now()
time_stamp = now.strftime('%a %b %d %H:%M:%S CST %Y')# Tue Apr 06 15:32:55 CST 2021  <class 'str'>
create_at = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
disk_io = psutil.disk_io_counters()
net_io = psutil.net_io_counters()
chart_name = ["磁盘IO","网络IO"]
metric_name1 = ["读(数量)","写(数量)", "读(字节)", "写(字节)", "读(时间)", "写(时间)"]
metric_name2 = ["发送字节数","接收字节数","发送包数","接收包"]
metric_value1 = [disk_io.read_count,disk_io.write_count,disk_io.read_bytes,disk_io.write_bytes,disk_io.read_time,disk_io.write_time]
metric_value2 = [net_io.bytes_sent,net_io.bytes_recv,net_io.packets_sent,net_io.packets_recv]
try:
    for i in chart_name:
        if i is "磁盘IO":
            for j in metric_name1:
                sql = "insert into clickhouse_host_metrics777(time_stamp,host_name, chart_name, metric_name,metric_value,create_at) values('%s','%s','%s','%s','%s','%s')" % \
                         (time_stamp, host_name, i, j, metric_value1[metric_name1.index(j)], create_at)
                # res = client.execute(sql)
                res = cursor.execute(sql)
        elif i is "网络IO":
            for j in metric_name2:
                sql = "insert into clickhouse_host_metrics777(time_stamp,host_name, chart_name, metric_name,metric_value,create_at) values('%s','%s','%s','%s','%s','%s')" % \
                      (time_stamp, host_name, i, j, metric_value2[metric_name2.index(j)], create_at)
                res = cursor.execute(sql)
    cursor.close()
    print("成功写入数据")
except Exception as e:
    print(str(e))

python将数据写入clickhouse

from clickhouse_driver import Client 

# connect ClickHouse
client = Client(host= ,port= ,user= ,database= , password=)

# 得到table1中查询的数据导入table2中(database2中应该事先建立对应的table2表)
query_ck_sql = """ SELECT *
    FROM database1.table1
    WHERE date = today() """
# 导入数据到临时表
try:
    # 导入数据
    client.execute("insert into {official_table_db}.{official_all_table_name}  \
        {query_ck_sql}".format(
            official_table_db = database2,
            official_table_name = table2,
            query_ck_sql = query_ck_sql)
        ,types_check = True)
except Exception as e:
    print str(e)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • python实现MySQL指定表增量同步数据到clickhouse的脚本

    python实现MySQL指定表增量同步数据到clickhouse,脚本如下: #!/usr/bin/env python3 # _*_ coding:utf8 _*_ from pymysqlreplication import BinLogStreamReader from pymysqlreplication.row_event import (DeleteRowsEvent,UpdateRowsEvent,WriteRowsEvent,) import clickhouse_driver

  • Python使用ClickHouse的实践与踩坑记录

    目录 1. 关于ClickHouse使用实践 1.1. ClickHouse 应用于数据仓库场景 1.2. 客户端工具DBeaver 1.3. 大数据应用实践 2. Python使用ClickHouse实践 2.1. ClickHouse第三方Python驱动clickhouse_driver 2.2. 实践程序代码 3. 小结一下 操作ClickHouse删除指定数据 ClickHouse是近年来备受关注的开源列式数据库(DBMS),主要用于数据联机分析(OLAP)领域,于2016年开源.目前

  • python连接clickhouse数据库的两种方式小结

    目录 python连接clickhouse数据库 主要针对clickhouse_driver的使用进行简要介绍 python将数据写入clickhouse python连接clickhouse数据库 在Python中获取系统信息的一个好办法是使用psutil这个第三方模块. 顾名思义,psutil = process and system utilities,它不仅可以通过一两行代码实现系统监控,还可以跨平台使用. 主要针对clickhouse_driver的使用进行简要介绍 第一步: 通过pi

  • Python操作MySQL数据库的两种方式实例分析【pymysql和pandas】

    本文实例讲述了Python操作MySQL数据库的两种方式.分享给大家供大家参考,具体如下: 第一种 使用pymysql 代码如下: import pymysql #打开数据库连接 db=pymysql.connect(host='1.1.1.1',port=3306,user='root',passwd='123123',db='test',charset='utf8') cursor=db.cursor()#使用cursor()方法获取操作游标 sql = "select * from tes

  • C++连接mysql数据库的两种方法小结

    现在正做一个接口,通过不同的连接字符串操作不同的数据库.要用到mysql数据库,以前没用过这个数据库,用access和sql server比较多.通过网上的一些资料和自己的摸索,大致清楚了C++连接mysql的方法.可以通过2种方法实现. 第一种方法是利用ADO连接, 第二种方法是利用mysql自己的api函数进行连接. 第一种方法可以实现我当前的需求,通过连接不同的字符串来连接不同的数据库.暂时只连接了mysql,sqlserver,oracle,access.对于access,因为它创建表的

  • Java 连接Access数据库的两种方式

    java连接MS Access的两种方式: 1.JDBC-ODBC Java连接Access可以使用MS自带的管理工具-->数据源(ODBC)设置建立连接,这样就不需要导入jar.但是,如此一来程序部署的每个机器上都要进行设置不方面.所以现在不会使用啦. 2.JDBC java也可以和连接其他数据库一样连接MS Access,导入数据库相应的jar包,进行连接. 复制代码 代码如下: java Access JDBC jar包:Access_JDBC30.jar 具体连接,参考下面代码: 复制代

  • c++连接mysql数据库的两种方法(ADO连接和mysql api连接)

    第一种方法可以实现我当前的需求,通过连接不同的字符串来连接不同的数据库.暂时只连接了mysql,sqlserver,oracle,access.对于access,因为它创建表的SQL语句不太兼容标准SQL语句,需要做一些处理,这里暂时不说.第二种方法只能针对于mysql数据库的连接,不过用这种方法不用安装MyODBC服务器程序. 不管用哪种方法,首先需要安装Mysql数据库,安装方法请看"mysql安装及一些注意点".最好安装一个Navicat for mysql,方便操作mysql数

  • python3连接MySQL8.0的两种方式

    1.下载MySQL官方的mysql-connector-python-8.0.17-py3.7-windows-x86-64bit.msi,直接点击安装: 2.安装完毕后直接可以导入mysql.connnector模块 连接方式一: import mysql.connector cnx = mysql.connector.connect(user='scott', password='password', host='127.0.0.1', database='employees') cnx.c

  • 详解java连接mysql数据库的五种方式

    第一种方式:将用户名和密码封装在Properties类中 首先,导入数据库连接包这个是毋庸置疑的.创建一个jdbc驱动dirver.将数据库(以MySQL为例)的url保存在所创建的字符串url中.如果mysql版本低于8.0,则url保存形式应该为: String url = "jdbc:mysql://localhost:3306/test" 如果mysql版本为8.0版本或以上,url保存形式为: String url = "jdbc:mysql://localhost

  • Python写入MySQL数据库的三种方式详解

    目录 场景一:数据不需要频繁的写入mysql 场景二:数据是增量的,需要自动化并频繁写入mysql 方式一 方式二 总结 大家好,Python 读取数据自动写入 MySQL 数据库,这个需求在工作中是非常普遍的,主要涉及到 python 操作数据库,读写更新等,数据库可能是 mongodb. es,他们的处理思路都是相似的,只需要将操作数据库的语法更换即可. 本篇文章会给大家分享数据如何写入到 mysql,分为两个场景,三种方式. 场景一:数据不需要频繁的写入mysql 使用 navicat 工

  • JDBC连接Access数据库的几种方式介绍

    接下来总结一下常用的几种连接方式. 例如有如下的Access数据库student,表basic,以及6条记录,现在通过几种方式在Jsp中将他们的数据显示出来.如图所示: 对于几种连接Access数据库的方式,基本上都是基于JDBC-ODBC方式的,当然也有纯JDBC驱动的方式.这里我暂时就不说了.对于这几种方式,除了取得连接之处不同外,其他的代码都是一样的.所以这里先写出取得连接的几种方式,然后再用完整的代码进行显示. 方式一:通过JDBC-ODBC方式桥连直接连接: 1.对于这种方式,首先要建

  • 对Python中创建进程的两种方式以及进程池详解

    在Python中创建进程有两种方式,第一种是: from multiprocessing import Process import time def test(): while True: print('---test---') time.sleep(1) if __name__ == '__main__': p=Process(target=test) p.start() while True: print('---main---') time.sleep(1) 上面这段代码是在window

随机推荐