Python定时查询starrocks数据库并将结果保存在excel

 更新时间:2025年03月07日 15:23:07   作者:运维仙人  
这篇文章主要为大家详细介绍了Python如何实现定时查询starrocks数据库并将结果保存在excel,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下

背景

在工作过程中要定期的更新excel表的信息,每个星期都要去查询strarocks的数据导出结果到excel,俗话说:“不会偷懒的运维不是好运维”,于是写了python小程序解决这个重复的工作,设置定时任务,直接去服务器下载导出的excel表格即可。

代码

代码的逻辑简单介绍:将要执行的SQL以名称进行区分保存并放到目录:SQLfileDir,设置结果存放路径:./…/outputdir/。python先查询数据,然后以SQL文件名前缀为excle名称保存,最后移动到指定目录。

本地调试界面:

# -*- coding: utf-8 -*-
# @Author : zjh
# @Time : 2023-12-27
# @Description: 定时跑数据保存到excel

import os
import shutil
import pandas as pd
import pymysql
import openpyxl
import datetime

class StarRocksExporter(object):
    def __init__(self, host, port, database, user, password, query,
                 srcdir, destdir,filename):
        self.host = host
        self.port = port
        self.database = database
        self.user = user
        self.password = password
        self.query = query
        self.srcdir = srcdir
        self.destdir = destdir
        self.filename = filename
        self.writer = pd.ExcelWriter(filename+str('.xlsx'))

    def export_to_excel(self):
        df = pd.read_sql(self.query, self.engine)
        # print(df)
        df.to_excel(self.writer, sheet_name=self.filename, index=False)
        self.writer.save()

    def move_to_dest(self):
        if not os.path.isdir(self.destdir):
            self.destdir = os.mkdir(self.destdir)
        file_list = os.listdir(self.srcdir)
        for file in file_list:
            #print(file)
            #print(file.split('.')[0])
            try:
                #print(file.split('.')[1])
                fiel_str = file.split('.')[1]
                if fiel_str == 'xlsx':
                    shutil.move(str(self.srcdir) + file, str(self.destdir) + file)
            except Exception:
                print("没有后缀的文件:",file)
            #shutil.move(str(self.srcdir) + file, str(self.destdir) + file)


    def execute(self):
        with pymysql.connect(host=self.host,port=self.port,database=self.database,user=self.user,password=self.password) as engine:
            self.engine = engine
            self.query_star_rock(self.query)
            self.export_to_excel()
            self.move_to_dest()

    def query_star_rock(self, query):
        cursor = self.engine.cursor()
        cursor.execute(query)
        results = cursor.fetchall()
        return  results

    def get_user(self, user):
        pass

    def get_password(self, password):
        pass

if __name__ == '__main__':
    Destdir = './../outputdir/'
    Srcdir = './'
    folder_path = './../SQLfileDir/'
    file_list = os.listdir(folder_path)

    for sqlfile in file_list:
        file_path=str(folder_path)+str(sqlfile)
        with open(file_path, "r", encoding='utf-8') as f:
           sql = f.read()
        srfilename = sqlfile.split('.')[0]
        exporter = StarRocksExporter('192.168.10.11', 19030, 'manager', 'sys_ro','sdagfsdg!@#saf134',
                                sql,Srcdir,Destdir,srfilename)
        exporter.execute()

MySQL的导出也可以用该脚本,因为starrocks/Doris连接都是用的MySQL驱动,兼容MySQL语法。

方法扩展

下面小编为大家介绍一下Python如何基于starrocks库连接查询StarRocks数据库,需要的可以参考一下

SQLAlchemy 用法

要使用 SQLAlchemy 连接到 StarRocks,连接字符串如下所示:

starrocks://<User>:<Password>@<Host>:<Port>/<Catalog>.<Database>

import pandas as pd
from sqlalchemy import create_engine, text

# 设置 pandas 显示选项以显示所有列
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
pd.set_option('display.max_colwidth', None)

"""
'starrocks://<User>:<Password>@<Host>:<Port>/<Catalog>.<Database>'
"""
def query_user_data(user_name):
    # 连接到StarRocks数据库
    engine = create_engine('starrocks://test_user:test_user123@192.168.1.2:9030/sr_db')

    # 执行查询并获取结果
    with engine.connect() as connection:
        sql_query = "select data from sr_db.user where user_name=" + user_name
        result = connection.execute(text(sql_query)).fetchall()

    # 将查询结果转换为 Pandas DataFrame
    ret_df = pd.DataFrame(result)
    return ret_df

# main function
if __name__ == '__main__':
    console = Console()
    user_name = "'tom'"
    df = query_user_data(user_name )
    # 如果 DataFrame 不为空,显示
    if df is not None and not df.empty:
        print(df)
    else:
        print("数据为空")

到此这篇关于Python定时查询starrocks数据库并将结果保存在excel的文章就介绍到这了,更多相关Python定时查询starrocks内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python urllib库的使用指南详解

    Python urllib库的使用指南详解

    所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地。 在Python中有很多库可以用来抓取网页,本文将讲解其中的urllib库,感兴趣的可以了解一下
    2022-04-04
  • 详解Python中迭代器和生成器的原理与使用

    详解Python中迭代器和生成器的原理与使用

    关于python中迭代器,生成器介绍的文章不算少数,有些写的也很透彻,但是更多的是碎片化的内容。本篇尝试用系统的介绍三者的概念和关系,需要的可以参考一下
    2022-05-05
  • spyder常用快捷键(分享)

    spyder常用快捷键(分享)

    下面小编就为大家带来一篇spyder常用快捷键(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • 详解Python中heapq模块的用法

    详解Python中heapq模块的用法

    Python中的heapq模块提供了一种堆队列heapq类型,这样实现堆排序等算法便相当方便,这里我们就来详解Python中heapq模块的用法,需要的朋友可以参考下
    2016-06-06
  • Python3使用PyQt5制作简单的画板/手写板实例

    Python3使用PyQt5制作简单的画板/手写板实例

    下面小编就为大家带来一篇Python3使用PyQt5制作简单的画板/手写板实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • python实现对指定输入的字符串逆序输出的6种方法

    python实现对指定输入的字符串逆序输出的6种方法

    这篇文章主要介绍了python实现对指定输入的字符串逆序输出的6种方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • 跟老齐学Python之再深点,更懂list

    跟老齐学Python之再深点,更懂list

    对于list,由于她的确非常非常庞杂,在python中应用非常广泛,所以,虽然已经介绍完毕了基础内容,这里还要用一讲深入一点点,往往越深入越...
    2014-09-09
  • Python中交换两个元素的实现方法

    Python中交换两个元素的实现方法

    今天小编就为大家分享一篇Python中交换两个元素的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Python中工厂模式的实现小结

    Python中工厂模式的实现小结

    工厂模式是一种创建型设计模式,通过定义一个工厂类,将对象的实例化过程封装起来,本文主要介绍了Python中工厂模式的实现小结,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11
  • python读取并绘制nc数据的保姆级教程

    python读取并绘制nc数据的保姆级教程

    其实目前很多数据以nc格式存储,这篇文章主要给大家介绍了关于python读取并绘制nc数据的保姆级教程,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05

最新评论