读取数据库数据,每10m写入一个文件,最后将所有文件写入压缩包
发布人:shili8
发布时间:2025-02-26 19:30
阅读次数:0
**读取数据库数据、写入文件并压缩**
在实际的开发中,我们经常需要从数据库中读取大量数据,并进行处理。这里我们使用Python语言来实现一个功能:每10分钟读取一次数据库中的数据,写入一个新的文件,每个文件包含一段时间内的所有数据;最后,将所有文件压缩成一个zip包。
### **依赖**
* Python3.x* `pandas`库(用于数据处理)
* `sqlite3`库(用于数据库操作)
* `zipfile`库(用于压缩)
### **代码实现**
import pandas as pdimport sqlite3import zipfilefrom datetime import datetime, timedelta# 数据库连接配置DB_NAME = 'example.db' TABLE_NAME = 'data' # 文件写入频率(10分钟) WRITE_FREQ =600# 最大文件数量MAX_FILES =1000def read_db_data(db_name, table_name): """ 从数据库中读取数据。 Args: db_name (str): 数据库名称。 table_name (str): 表名。 Returns: pandas.DataFrame: 数据框。 """ conn = sqlite3.connect(db_name) df = pd.read_sql_query(f"SELECT * FROM {table_name}", conn) conn.close() return dfdef write_data_to_file(df, file_name): """ 将数据写入文件。 Args: df (pandas.DataFrame): 数据框。 file_name (str): 文件名称。 """ # 写入文件 df.to_csv(file_name, index=False) def compress_files(zip_file_name, files): """ 将多个文件压缩成一个zip包。 Args: zip_file_name (str): zip包名称。 files (list): 文件列表。 """ with zipfile.ZipFile(zip_file_name, 'w') as zip_file: for file in files: zip_file.write(file) def main(): # 初始化变量 start_time = datetime.now() current_time = start_time files = [] while True: #读取数据库数据 df = read_db_data(DB_NAME, TABLE_NAME) # 写入文件 file_name = f'data_{current_time.strftime("%Y%m%d_%H%M")}.csv' write_data_to_file(df, file_name) files.append(file_name) # 计算下一次写入时间 next_write_time = current_time + timedelta(minutes=WRITE_FREQ) # 如果超过最大文件数量,压缩并退出 if len(files) >= MAX_FILES: compress_files('data.zip', files) break # 等待下一次写入时间 while datetime.now() < next_write_time: pass current_time = datetime.now() if __name__ == '__main__': main()
### **注释**
* `read_db_data`函数用于从数据库中读取数据。
* `write_data_to_file`函数用于将数据写入文件。
* `compress_files`函数用于将多个文件压缩成一个zip包。
* `main`函数是程序的入口,负责初始化变量、读取数据库数据、写入文件并压缩。
### **注意**
* 这个示例代码使用了sqlite3库来连接数据库,并使用pandas库来处理数据。请根据实际需求调整数据库配置和表名。
* `WRITE_FREQ`变量控制着每10分钟写入一次文件的频率,`MAX_FILES`变量控制着最大文件数量。如果超过最大文件数量,程序会压缩并退出。
* 这个示例代码使用了zipfile库来压缩文件,请根据实际需求调整压缩包名称和路径。