Pythonの標準ライブラリのsqlite3はデータベース環境を提供してくれます。
今回はsqlite3のデータベースにテーブルを作成し、CSVファイルのデータをインポートします。
環境情報
名前 | バージョン |
---|---|
Mac | Big Sur 11.2.3 |
Visual Studio Code | 1.54.3(Universal) |
Python | 3.9.1 |
python-pptx | 0.6.18 |
今回のCSVデータ
sqlite3 データベースの作成
import sqlite3
#test.dbを作成し、接続(すでに存在する場合は接続のみ)
con = sqlite3.connect(“test.db”)
sqlite3は標準ライブラリのため、pipでのインストールは不要です。
sqlite3.connect(“データベース名”)でデータベースを作成・接続することができます。
既に同じ名前のデータベースが存在している場合は接続のみ行います。
sqlite3 テーブルの作成
cur = con.cursor()
create_test = “CREATE TABLE IF NOT EXISTS test (id INTEGER, name TEXT, height INTEGER, weight INTEGER)”
cur.execute(create_test)
cursor()オブジェクトはSQLを実行するために必要なオブジェクトです。
execute()で単一のSQLステートメントを実行します。
ここではcreate_test変数に格納したCREATE TABLE文を実行しています。
ちなみにIF NOT EXISTSは
「作成しようとしているテーブルが存在しなければ作成する」ことができるオプションです。
もしこのオプションをつけずに既に同じ名前のテーブルが存在している場合に
CREATE TABLEすると
sqlite3.OperationalError: table テーブル名 already exists
とエラーが返されます。
CSVデータの読み込み
import csv
open_csv = open(“test.csv”)
read_csv = csv.reader(open_csv)
csvファイルの読み込みはPythonの標準モジュールであるcsvを使用します。
reader()でcsvを読み込み、各行を文字列として返します。
sqlite3 csvデータをexecutemany()でINSERTする
next_row = next(read_csv)
rows = []
for row in read_csv:
rows.append(row)
cur.executemany(
“INSERT INTO test (id, name, height, weight) VALUES (?, ?, ?, ?)”, rows)
con.commit()
open_csv.close()
next()関数を使用することでCSVファイルの1行目に存在する列名を
スキップさせることができます。
executemany()は複数のSQLステートメントを実行することができます。
INSERTする際のVALUESの値を「?」とすることでリストの各行の要素を
順番に取り出してテーブルに挿入することができます。
sqlite3 テーブルに挿入されたデータの確認
select_test = “SELECT * FROM test”
print(cur.execute(select_test))
print(cur.fetchall())
#こちらでもみれます。
for i in cur.execute(select_test):
print(i)
fetchall()は以前cx_Oracleを紹介した時に実行しているので詳細は以下ご確認ください。
sqlite3 今までのコード全量と少しの追記
import sqlite3
import csv
#test.dbを作成し、接続(すでに存在する場合は接続のみ)
con = sqlite3.connect(“test.db”)
cur = con.cursor()
#testテーブルを作成(IF NOT EXISTSは「存在しなければ作成する」という意味)
create_test = “CREATE TABLE IF NOT EXISTS test (id INTEGER, name TEXT, height INTEGER, weight INTEGER)”
cur.execute(create_test)
#testテーブルのデータを削除(何回もコード実行すると同じデータ追加されるので)
delete_test = “DELETE FROM TEST”
cur.execute(delete_test)
#csvファイルの指定
open_csv = open(“test.csv”)
#csvファイルを読み込む
read_csv = csv.reader(open_csv)
#next()関数を用いて最初の行(列名)はスキップさせる
next_row = next(read_csv)
#csvデータをINSERTする
rows = []
for row in read_csv:
rows.append(row)
#executemany()で複数のINSERTを実行する
cur.executemany(
“INSERT INTO test (id, name, height, weight) VALUES (?, ?, ?, ?)”, rows)
#テーブルの変更内容保存
#csvも閉じておきましょう
con.commit()
open_csv.close()
#testテーブルの確認
select_test = “SELECT * FROM test”
print(“—————————-“)
print(“fetchall”)
print(“—————————-“)
print(cur.execute(select_test))
print(cur.fetchall())
print(“—————————-“)
print(“for文”)
print(“—————————-“)
for i in cur.execute(select_test):
print(i)
#データベースの接続終了
con.close
コメント