見出し画像

pandasライブラリを使ってcsvからsqlを生成する

自作も含めてデータといえるものは、すべてRDBMS下のテーブルに保存している。
そうしておけば管理が楽になるからだ。

検索、一括置換、層別… 人間が遣ると手間がかかる作業が、1秒以下で終わってしまう。
RDBMSも、Olacleなんて馬鹿高いものを使う必要もない。

だが最初のデータはcsvで下図のように管理している、

csvデータ例

エクセルのようなマトリックスになっているが、これはCassavaというフリーウエアを使ったもので動きも、軽快でストレスがまったくない。
業務で指定されてエクセルを使うこともあるが、あんなに高いだけで動きも鈍いアプリは使いたくないものだ。未だにShift-JISがメインになってるも、アホかと言いたくなる。

前置きはこのくらいにして、今回紹介する、puthonプログラムを使用すると、上記のcsvから、下記のようなsqlファイルが生成される。

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ファイルを作成しました。")

つづく

この記事が気に入ったらサポートをしてみませんか?