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并发编程 Process对象的其他属性方法join方法详解
这篇文章主要介绍了python并发编程 Process对象的其他属性方法join方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2019-08-08
python+matplotlib绘制简单的海豚(顶点和节点的操作)
这篇文章主要介绍了python+matplotlib绘制简单的海豚(顶点和节点的操作),具有一定借鉴价值,需要的朋友可以参考下2018-01-01
如何优雅地处理Django中的favicon.ico图标详解
默认情况下,浏览器访问一个网站的时候,同时还会向服务器请求"/favicon.ico"这个URL,目的是获取网站的图标,下面这篇文章主要给大家介绍了关于如何优雅地处理Django中favicon.ico图标的相关资料,需要的朋友可以参考下2018-07-07
解决ToPILImage时出现维度报错问题pic should be 2/3 d
这篇文章主要介绍了解决ToPILImage时出现维度报错问题pic should be 2/3 dimensional. Got 4 dimensions.具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-02-02


最新评论