PythonとSQLite3とPandasでTableの作成とTableの出力
概要
Pandasを使用してcsvfileをSQLite3へ読み込み、及び、
Pandasを使用してcsvfileへSQLite3を書き出し。
Pandas視点で言えば、
Pandasでcsvfileを読み込みSQLite3へ書き出し、及び、
PandasでSQLite3を読み込みcsvfileへ書き出し。
Pandas API
タブ区切りのファイルから読み込み:read_table
タブ区切りのファイルから読み込み:read_csvで引数sep='\t'
タブ区切りのファイルへの書き出し:DataFrame.to_csvで引数sep='\t'
カンマ区切りのファイルから読み込み:read_csv
カンマ区切りのファイルへの書き出し:DataFrame.to_csv
Excelファイルから読み込み:read_excel
JSONファイルから読み込み:read_json
HTMLファイルから読み込み:read_html
XMLファイルから読み込み:read_xml
Excelファイルへの書き出し:DataFrame.to_excel
JSONファイルへの書き出し:DataFrame.to_json
HTMLファイルへの書き出し:DataFrame.to_html
XMLファイルへの書き出し:DataFrame.to_xml
SQLから読み込み:read_sql
SQLから読み込み:read_sql_query
SQLから読み込み:read_sql_table
SQLへの書き出し:DataFrame.to_sql
※
pandas.read_sql_tableのconは「SQLite DBAPI 接続モードはサポートされていません」とのこと。故に、
pandas.read_sqlのsqlでtable_nameを指定してもエラーになる、のだと思われる...
入力データ(sample.csv)
220 | 220.0 | nico | 2022/02/20 |
221 | 221.1 | nuke | 2022/02/21 |
222 | 222.2 | neko | 2022/02/22 |
出力データ(result.csv)
ID | Ver | Name | Date |
---|---|---|---|
220 | 220.0 | nico | 2022/02/20 00:00:00 |
221 | 221.1 | nuke | 2022/02/21 00:00:00 |
222 | 222.2 | neko | 2022/02/22 00:00:00 |
Pythonコード
import sqlite3 import pandas as pd def main(): print("PRESS ENTER KEY TO BOOT") input() con = None cur = None try: con = sqlite3.connect(":memory:") cur = con.cursor() pd.read_csv( "hello_sqlite_pandas_sample.csv", encoding="cp932", header=None, names=[ "ID", "Ver", "Name", "Date", ], dtype={ "ID": "int64", "Ver": "float64", "Name": "string", }, parse_dates=[ "Date", ], ).to_sql("Sample", con, index=False) pd.read_sql("SELECT * FROM Sample", con).to_csv("hello_sqlite_pandas_result.csv", encoding="cp932", index=False) except Exception as e: print(e) finally: cur = cur.close() if cur is not None else None con = con.close() if con is not None else None print() print("PRESS ENTER KEY TO EXIT") input() if __name__ == "__main__": main()
※
入力データに日本語は含まれていませんが、
当方環境がWindowsなので文字コードのエンコードをcp932にしています。
Link1
Python documentation
https://docs.python.org/3/
Python Standard Library
https://docs.python.org/3/library/
sqlite3 - DB-API 2.0 interface for SQLite databases
https://docs.python.org/3/library/sqlite3.html
sqlite documentation
https://www.sqlite.org/docs.html
List Of PRAGMAs
https://www.sqlite.org/pragma.html#toc
Datatypes In SQLite
https://www.sqlite.org/datatype3.html
pandas documentation
https://pandas.pydata.org/docs/
pandas api input/output
https://pandas.pydata.org/docs/reference/io.html
pandas api reference pandas.read_csv
https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html
pandas api reference pandas.read_sql
https://pandas.pydata.org/docs/reference/api/pandas.read_sql.html
pandas api reference pandas.DataFrame.to_csv
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_csv.html
pandas api reference pandas.DataFrame.to_sql
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_sql.html
pandas api user guide dtypes
https://pandas.pydata.org/docs/user_guide/basics.html#basics-dtypes
Link2
SQLite入門
https://www.javadrive.jp/
https://www.javadrive.jp/sqlite/
SQLiteはどこが凄いデータベース管理システムなのか調べてみた
https://qiita.com/ko1nksm/items/87d27a287e1b6005d11c
python3でsqlite3の操作。作成や読み出しなどの基礎。
https://qiita.com/saira/items/e08c8849cea6c3b5eb0c
SQLite3のためのSQLリファレンス
https://qiita.com/tetr4lab/items/691ceeb528d6144547c8
SELECT文の評価順序の話
https://qiita.com/suzukito/items/edcd00e680186f2930a8
SQL記述者全員が理解すべきSELECT文の論理的な処理順序のお話
https://qiita.com/k_0120/items/a27ea1fc3b9bddc77fa1
SQL サブクエリ入門
https://qiita.com/aki3061/items/6df0513ccc5aa40a075a
SQL サブクエリ編
https://qiita.com/sho91/items/0de49ba749952ee5cb22
SQLiteで日付時刻を扱う際のポイント
https://qiita.com/TomK/items/132831ab45e2aba822a8
SQLite3 で created_at, updated_at
https://qiita.com/kerupani129/items/0372ea29d9375e55bb36
あとがき
ノンプログラマーの素人が記述をしたコードです。
狭い利用範囲と少ない利用頻度での確認ですので、
記載内容に間違いや勘違いがあるかもしれません。
上記内容を参照の際は自己責任でお願い致します。