概要
一定のルールに従った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()