Pythonでプログラミング


Pythonでプログラミング

背景

Pythonを学んでいるので何かしら作ってみようかと思う。
Insert文をpythonで作ってみる。

対象ユーザー(例)

自宅でポートフォリオ作成のためにWebサービスを作っていて
データ作成のためにInsert作成をツールで便利に使いたい人。

非対象ユーザー

現場で使えないと0だと思っている人。
レビューとかお客さんがとか言って開発者にのしかかってくる人。
進捗進捗ばかり言って日になんども衝動的にくる人。
クレームばかりつけてくる人。

調査

元にしたSQL文
create table drivers (
id serial primary key,
first_name varchar,
last_name varchar
);
INSERT INTO drivers (first_name, last_name) VALUES ('Amy', 'Hua');
要件:
文字列はシングルクォートで囲むこととする。
項目が可変であっても対応できるものとする。
テーブル名は入力ファイル名を指定することで設定することにする。

原案

・データをファイルから読み取る。
・SQLを作る。
・ファイルに書き込む。

環境

Colaboratoryを使用することを提案する。
https://colab.research.google.com/notebooks/welcome.ipynb?hl=ja
使い方は下記のアドレス参照
https://obgynai.com/google-colaboratory/

SQL文はpostgresql を想定している。

画像

参考GITHUB

以下ソースコード

drivers.csv
VARCHAR(n),VARCHAR(n)
first_name,last_name)
Amy,Haru
Gimmy,Smith

#drivers.csvを編集を行い、ファイル名をテーブル名+csvに変更する
input = './sample_data/drivers.csv'
output = './sample_data/output.txt'

table = input.split('/')[-1].split('.')[0]
with open (input, encoding='utf-8') as f:
    with open('output.txt', 'w', encoding='utf-8') as g:
        contents = "Insert into " +  table +"("
        i = 0
        for row in f:
            if i == 0:
               typeList = row.rstrip().split(',')
            if i ==1:
               columList = row.rstrip().split(',')
               k = 0
               for c in columList:
                   if len(columList) == k+1:
                        contents = contents + c + 'VALUES ('
                   else:
                       contents = contents + c + ','
                   k = k + 1
            basecontets = contents

            if i >= 2:
                j = 0
                for r in row.rstrip().split(','):
                    if not 'INTEGER' in typeList[j]:
                        r = "'"+ r +"'"
                    if len(row.rstrip().split(',')) == j+1:
                             basecontets = basecontets +r
                    else:
                            basecontets = basecontets +r+','
                    j = j + 1
                basecontets = basecontets+ ');' + '\n'
                g.write(basecontets)
                basecontets = contents
            i = i + 1
        print("作成完了しました")

output.txt
Insert into drivers(first_name,last_name)VALUES ('Amy','Haru');
Insert into drivers(first_name,last_name)VALUES ('Gimmy','Smith');