pandasライブラリを使ってcsvからsqlを生成する
自作も含めてデータといえるものは、すべてRDBMS下のテーブルに保存している。
そうしておけば管理が楽になるからだ。
検索、一括置換、層別… 人間が遣ると手間がかかる作業が、1秒以下で終わってしまう。
RDBMSも、Olacleなんて馬鹿高いものを使う必要もない。
だが最初のデータはcsvで下図のように管理している、
エクセルのようなマトリックスになっているが、これはCassavaというフリーウエアを使ったもので動きも、軽快でストレスがまったくない。
業務で指定されてエクセルを使うこともあるが、あんなに高いだけで動きも鈍いアプリは使いたくないものだ。未だにShift-JISがメインになってるも、アホかと言いたくなる。
前置きはこのくらいにして、今回紹介する、puthonプログラムを使用すると、上記のcsvから、下記のようなsqlファイルが生成される。
上の図では、5レコードしか表示していないが、実際には200レコードほどある。この生成時間が1秒もかからなかった。人間がやったら一日かけても終わらないだろう。
以下に、今回作成したpythonソースを掲載しておく。pythonに慣れた人なら、これを見ただけですぐに活用できると確信している。
最初はソースコード表示に引用表示を用いたが、ソースが見づらくTABが正確に表示されていない。
これはpythonソースとしては致命的な問題だ。PythonはTABがインデントとなる言語だからだ。
そこでソースをPDFにしたものを下記からダウンロードできるようにしておいた。
次回以降、このソースの使い方や、コマンドオプションなどに触れていく予定でいる。
ただしpythonを使い慣れている人にはそんなものは不要だろう。
付記:
noteにも、コード表示機能があることが解った。
以下にそれを用いて表示しておく。
import pandas as pd
## sqlの前方部分を作成
def sqlSf(csvfile,table):
array = pd.read_csv(csvfile, header=0)
header = array.columns
n = 0
sql = "INSERT INTO " + table + "("
for clmn in header:
if n == 0:
sql += clmn
else:
sql += ", " + clmn
n += 1
sql += ") values ("
return sql
## sqlの前方部分に実際に入力するカラムの内容を結合して
## 一塊の文字列(files)にする
def sqlf(csvfile,table):
sqlS = sqlSf(csvfile,table)
array = pd.read_csv(csvfile).values.tolist()
files = ""
for tmp in array:
sqlE = ""
n = 0
for dat in tmp:
if n == 0:
sqlE += "'" + str(dat) + "'"
else:
sqlE += ", " + "'" + str(dat) + "'"
n += 1
sql = sqlS + sqlE + ");"
files += sql + "\n"
return files
## 最初の処理
print("sqlファイルを作成します。")
files = sqlf("test.csv","table")
f = open('test.sql', 'w')
f.write(files)
f.close()
print("sqlファイルを作成しました。")