Help us understand the problem. What is going on with this article?

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

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

概要

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

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

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

利用環境

Python 3.7.2
Visual Studio Code 1.39.1

ソースコード

CSV2insSQL.py
#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()

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした