Python プログラミング

PythonでCSVから、insert文を生成する

概要

一定のルールに従ったCSVを用意して、そこからinsert文を生成するスクリプト
Excelシートで同様のものを作っている事例も見かけるね

一定のルールとは
1.ファイル名(拡張子を除く)がテーブル名
2.ヘッダありのcsvとし、カラム名はDBカラム名と一致しているものとする。

課題があって、 CSVだけでは、テーブルに対する型の情報が無いので、''でくくるかどうかの判定ができない
この例では、一旦全て囲っている。
実務的には、後で正規表現で置換とかやればいいという考え

利用環境

>
Python 3.7.2
Visual Studio Code 1.39.1
>

ソースコード

#CSVから、insert文を生成する。
#ルール
#ファイル名(拡張子を除く)がテーブル名
#ヘッダありのcsvとし、カラム名はDBカラム名と一致しているものとする。
#課題!! CSVだけでは、テーブルに対する型の情報が無いので、''でくくるかどうかの判定ができない
# この例では、一旦全て囲っている  (実用的には、後で正規表現で置換とか)


import csv
import os

FROM_CSV = '.\\CSV\\' + "xxx_LIST.csv"

def main():
    #本体処理
    #...マスタのinsert生成
    with open(".\\CSV\\insertSQL.txt", "w", newline="",encoding="cp932") as wf:
        #ファイル名からテーブル名へ
        tablename = os.path.splitext(os.path.basename(FROM_CSV))[0]

        with open(FROM_CSV, encoding="cp932",) as f:
            reader = csv.DictReader(f)

            for row in reader:
                #insert文生成
                insert_sql = "insert into " + tablename
                fields = ",".join(reader.fieldnames)
                insert_sql =  insert_sql + "( " + fields + ") VALUES"
                valuelist = []
                for fld in reader.fieldnames:
                   #課題!! CSVだけでは、テーブルに対する型の情報が無いので、''でくくるかどうかの判定ができない
                   # この例では、一旦全て囲っている 
                   valuelist.append("'" + row[fld] + "'")

                valustr = ",".join(valuelist)
                insert_sql =  insert_sql + "( " + valustr + ");"

                wf.write(insert_sql+"\n")


if __name__ == '__main__': main()

-Python, プログラミング
-