リストの結合と、DBへの格納
長さが同じリストを、列が増える方向に連結して、DBに格納する検証コード。
Pandasを経由したほうが、SQLでのテーブル定義 をしなくてもよいから楽
プログラム
import pandas as pd import sqlite3 # 長さが同じListを、列が増える方向に連結 # Index は無しで、DBに入れる。 # ------------------------------------------- # 結合 x = [1, 2, 3, 4, 5] y = ['a', 'b', 'c', 'd', 'e'] z = [1.1, 2.2, 3.3, 4.4, 5.5] # name はDBの列名になる。 s_x = pd.Series(data=x, name="x") s_y = pd.Series(data=y) s_y.name = "y" s_z = pd.Series(data=z) # axis=0 行を増やす方向に連結 axis = 0 df1 = pd.concat([s_x, s_y], axis=axis) print(df1, type(df1)) # axis=1 列を増やす方向に連結 axis = 1 df1 = pd.concat([s_x, s_y], axis=axis) print(df1, type(df1)) df2 = pd.concat([s_x, s_y], axis=axis) print(df2, type(df2)) df3 = pd.concat([s_x, s_y, s_z], axis=axis) print(df3, type(df3)) # ------------------------------------------- # DB書き込み con = sqlite3.connect(":memory:") con.isolation_level = None # None で自動コミットモード cur = con.cursor() cur.execute('PRAGMA temp_store=MEMORY;') cur.execute('PRAGMA journal_mode=MEMORY;') # DBへの書き込み df3を書き込み。インデックスは無し。 table_name = 'test_table' df3.to_sql(name=table_name, con=con, index=False) # テーブル定義の確認 tmp = cur.execute("SELECT * FROM sqlite_master WHERE type='table'") print("# テーブル定義の確認") for row in tmp: print(row) # 書き込んだの内容の確認 tmp = cur.execute("SELECT * FROM {0}".format(table_name)) print("# テーブルの内容の確認") for row in tmp: print(row) con.close()
実行結果
(base) C:\>python C:\hello_pandas\hello_concat.py 0 1 1 2 2 3 3 4 4 5 0 a 1 b 2 c 3 d 4 e dtype: object <class 'pandas.core.series.Series'> x y 0 1 a 1 2 b 2 3 c 3 4 d 4 5 e <class 'pandas.core.frame.DataFrame'> x y 0 1 a 1 2 b 2 3 c 3 4 d 4 5 e <class 'pandas.core.frame.DataFrame'> x y 0 0 1 a 1.1 1 2 b 2.2 2 3 c 3.3 3 4 d 4.4 4 5 e 5.5 <class 'pandas.core.frame.DataFrame'> # テーブル定義の確認 ('table', 'test_table', 'test_table', 2, 'CREATE TABLE "test_table" (\n"x" INTEGER,\n "y" TEXT,\n "0" REAL\n)') # テーブルの内容の確認 (1, 'a', 1.1) (2, 'b', 2.2) (3, 'c', 3.3) (4, 'd', 4.4) (5, 'e', 5.5)