CSV转SQL插入语句并写入文件的Python脚本

CSV转SQL插入语句并写入文件的Python脚本

import csv
import os
import time


def csv_to_sql_insert(csv_file, table_name, chunk_size):
    # 读取CSV文件
    with open(csv_file, 'r', newline='') as file:
        reader = csv.reader(file)

        # 读取并处理列名
        headers = next(reader)
        columns = ', '.join(map(lambda x: f'"{x}"', headers))
        insert_template = f'INSERT INTO {table_name} ({columns}) VALUES\n'

        # 处理CSV数据并生成SQL语句
        statements = []
        for row in reader:
            # 清除空值和NULL,并用空字符串替换
            cleaned_row = [value.replace('null', '').strip() if value != 'NULL' else 'NULL' for value in row]

            # # 组装SQL VALUES部分
            # row_values = ', '.join(map(lambda x: f'"{x}"' if x != 'NULL' else 'NULL', cleaned_row))

            # 组装SQL VALUES部分,保留NULL值
            # row_values = ', '.join(f'"{value}"' if value != 'NULL' else 'NULL' for value in row)

            # 组装SQL VALUES部分,如果值为null或NULL则不加双引号
            row_values = ', '.join(f'NULL' if value.upper() == 'NULL' else f'"{value}"' for value in row)

            # 添加到SQL语句列表中
            statements.append(f'({row_values}),\n')

            # 分组SQL语句
        chunked_statements = [statements[i:i + chunk_size] for i in range(0, len(statements), chunk_size)]

        # 组装完整的SQL INSERT语句
        sql_insert_statements = []
        for chunk in chunked_statements:
            sql_insert = insert_template + ''.join(chunk)[:-2] + ';\n'
            sql_insert_statements.append(sql_insert)

        return sql_insert_statements


def write_to_sql_files(sql_statements, base_path, table_name):
    # 写入SQL语句到文件
    for i, statement in enumerate(sql_statements, start=1):
        file_path = os.path.join(base_path, f'{table_name}-{i}.sql')
        with open(file_path, 'w', newline='') as f:
            f.write(statement)
            # print(statement)
        print(f'Wrote {file_path}')


# 测试代码
if __name__ == '__main__':
    # 记录开始时间
    start_time = time.time()

    base_path = 'E:\\20240421_test_python\\'
    file_name = 'tbl_test.csv'
    csv_file_path = os.path.join(base_path, file_name)
    table_name = 'tbl_test'
    chunk_size = 15

    # 转换CSV到SQL INSERT语句
    sql_statements = csv_to_sql_insert(csv_file_path, table_name, chunk_size)

    # 将SQL语句写入文件
    write_to_sql_files(sql_statements, base_path, table_name)

    # 记录结束时间
    end_time = time.time()

    # 计算并打印运行时间
    elapsed_time = end_time - start_time
    print(f'Elapsed time: {elapsed_time:.2f} seconds')

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CSV文件是一种常见的数据存储格式,而SQL文件是一种用于数据库操作的脚本文件。将CSV文件SQL文件的过程,主要是将CSV文件中的数据换为SQL语句的插入语句,以便能够将数据导入到数据库中。 首先,我们需要创建一个适合存储CSV文件数据的数据表。根据CSV文件的结构,定义SQL表的各列以及数据类型。 然后,可以使用编程语言,如PythonJava,来读取CSV文件。将CSV文件逐行解析,获取每行数据的值,并根据表的结构,构建SQL插入语句。 在构建插入语句时,需要将CSV文件中的每一列的值按照相应的数据类型进行处理。例如,对于日期类型的列,需要将CSV文件中的日期字符串换为数据库支持的日期格式。 在构建完插入语句后,将其写入到一个SQL文件中。可以使用文件操作函数将SQL插入语句写入文件中,每条插入语句占一行。 最后,将生成的SQL文件导入到数据库中。可以使用数据库命令行工具,如MySQL的mysql命令,运行该SQL文件,执行插入语句将数据导入到对应的数据表中。 需要注意的是,换过程中还要处理一些特殊情况,如空值、特殊字符等。同时,如果CSV文件较大,可能需要考虑分批导入数据,避免数据量过大导致数据库性能下降。 综上所述,将CSV文件换为SQL文件的过程,主要包括创建表结构、解析CSV文件、构建SQL插入语句和导入数据库等步骤。这样可以方便地将CSV文件中的数据导入到数据库中,以便进行后续的数据操作和分析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值