【SQLite】PythonからDBに接続する【Python】

Python,SQLite3

PythonからSQLite3のDBに接続する

pipでSQLite3パッケージのインストールをするため、別途DBソフトとしてSQLite3をインストールする必要はない。


①DB作成処理

CSVファイルからSQLite3のDBを作成する

処理内容

  1. CSVファイルの内容をPandasのデータフレームに読み込む
  2. DBを新規に作成し、テーブルにデータフレームを書き込む
    1. 既存のテーブル名だった場合は置き換える
  3. 確認用のSQLを実行する

作成情報

  • DB名:test.db
  • テーブル名:menu_list
  • カラム名
    • menu
    • category
    • price
    • cal

input.csv

menu, category, price, cal
Blended coffee, drink, 270, 7
American coffee, drink, 270, 7
Espresso coffee, drink, 270, 10
Cappuccino, drink, 320, 87
Cafe latte, drink, 320, 93
Honey cafe au lait, drink, 340, 207
Soy milk tea, drink, 360, 88
Cafe mocha, drink, 410, 228
Tea, drink, 220, 2
Rooibos tea, drink, 250, 2
Royal milk tea, drink, 350, 116
Soy milk latte, drink, 390, 109
Cocoa, drink, 380, 244
Clock monsieur, toast, 320, 221
Toast, toast, 190, 254
Cheese toast, toast, 250, 317
Milk chocolate mousse, dessert, 390, 335
Stick shoe custard, dessert, 250, 257
Stick shoe chocolate, dessert, 250, 263
Baked cheese cake, dessert, 410, 335

コード

import sqlite3
import pandas as pd

# CSVをデータフレームに読み込む
df = pd.read_csv('input.csv')

# データフレームをテーブルに書き込む
db_name = 'test.db'
conn = sqlite3.connect(db_name)
df.to_sql('menu_list', conn, if_exists='replace')

cur = conn.cursor()

# 確認用のSQLを実行する
query = 'select * from menu_list'
for row in cur.execute(query):
    print(row)

conn.close()

②DB接続処理

上記 ①DB作成処理 で作成したDBに接続する

処理内容

  1. PythonからSQLite3に接続する
  2. テーブル名、列名、値を変数に格納する
  3. 上記の変数を引数に指定してデータ取得関数を実行する
  4. 実行結果を表示する

対象テーブル名

  • 上記で作成した menu_list を対象とする

実行SQL

  • 変数 query に格納する

コード

import sqlite3

# SQLiteへの接続
def conn_to_postgres():
    # 接続先データベース
    db_name = 'test.db'
    try:
        conn = sqlite3.connect(db_name)
        return conn

    except Exception as e:
        print('Error: データベースに接続できませんでした')
        print(e)
        return None

# テーブルからデータを取得する
def get_data_from_table(conn, table_name, column_name, value):
    try:
        cur = conn.cursor()
        query = f'select * from {table_name} where {column_name} = "{value}"'
        cur.execute(query)
        rows = cur.fetchall()
        return rows

    except Exception as e:
        print('Error: テーブルからデータを取得できませんでした')
        print(e)
        return []

if __name__ == '__main__':
    conn = conn_to_postgres()
    if conn:
        # 取得条件の設定
        table_name = 'menu_list'
        column_name = 'menu'
        value = 'Rooibos tea'

        rows = get_data_from_table(conn, table_name, column_name, value)

        if rows:
            for row in rows:
                print(row)

        # データベースとの接続を終了する
        conn.close()