LoginSignup
6
6

More than 1 year has passed since last update.

PythonでSQLite3を扱うための具体的なサンプルコード

Last updated at Posted at 2020-02-26

SQLite3はPythonに最初から入っていることや、ファイルとしてDBを保存できることなどからPythonで最も簡単に扱えるデータベースと言えます。

そこでここでは、Pythonを用いたSQLite3のデータの書き込み/読み出しのサンプルコードをメモしておきます。

基本

import sqlite3

# 接続DBファイルの指定
conn = sqlite3.connect('example.sqlite3')
conn.row_factory = sqlite3.Row 
c = conn.cursor()

# SQL文の実行
sql="create table persons(name, age, job)"
c.execute(sql)

# 変更の保存
conn.commit()

# DBから切断
conn.close()

SQL文を実行した後、その変更を反映するためには「conn.commit()」を実行する必要があります。

テーブル操作

テーブルの作成

sql="create table persons(name, age, job)"
c.execute(sql)

ここでは例としてname・age・jobの3つのカラムを持つ「persons」テーブルを作成しています。

テーブルにカラムを追加

sql="alter table persons add column address"
c.execute(sql)

「persons」テーブルに「address」のカラムを追加

テーブルを削除

sql="drop table persons"
c.execute(sql)

「persons」テーブルを削除する処理

テーブル名の変更

sql="alter table persons rename to workers"
c.execute(sql)

「persons」テーブルを「workers」に名称変更

データの操作

データの追加(INSERT)

sql="insert into persons values ('Ann', '20','apprentice')"
c.execute(sql)

データの変更(UPDATE)

sql="update persons set age=21 where name='Ann'"
c.execute(sql)

このコードでは「persons」テーブル内の「name='Ann'」のAgeを21に変更しています。

データの削除(DELETE)

sql="delete from persons where age<20"
c.execute(sql)

このコードでは「persons」テーブル内のageが20以下のデータが削除されます。

データの取り出し

基本

sql="select * from persons"
c.execute(sql)

全部取り出す場合はこのコードで事足ります。
データサイズが小さい場合はDBから全部取得した後にPython側のPandasなどで処理したほうが分かりやすいかもしれません。

取り出したデータをリストに展開

import sqlite3

# DBに接続
conn = sqlite3.connect('example.sqlite3')
conn.row_factory = sqlite3.Row #dict型を指定
c = conn.cursor()

# DBの中身を取得
c.execute('select * from persons')
results = c.fetchall()

# 展開用に空リストを作成
persons_list=[]

# リストに展開する処理
for r in results:
    persons_list.append(r)

# DBから切断
conn.close()

# 表示
display(persons_list)

「persons_list」に行データを格納しています。取り出すときは

persons_list[0]['name']
## ann

この様にすると取り出せます。

一部取り出し(カラム名指定)

sql="select name from persons"
c.execute(sql)

name列だけ取り出すコード

一部取り出し(条件指定)

sql="select * from persons where age>20"
c.execute(sql)

ageが21以上の行を抽出

データの取り出し順を指定

#昇順で取り出し
sql="select * from persons order by age asc"
c.execute(sql)

#降順で取り出し
sql="select * from persons order by age desc"
c.execute(sql)

PandasでSQLを読み込み

import sqlite3
import pandas as pd

conn = sqlite3.connect("sample01.sql")
conn.row_factory = sqlite3.Row 
c = conn.cursor()

sql="select * from persons"
df = pd.read_sql_query(sql, conn)

c.close()
conn.close()

PandasでSQLを保存

import sqlite3
import pandas as pd

conn = sqlite3.connect("sample01.sql")
conn.row_factory = sqlite3.Row 
c = conn.cursor()

df.to_sql('data_name', conn, if_exists='replace')

c.close()
conn.close()

参考ページ

[Python3][SQLite3]レコードを辞書型(dict型)で取得する簡単な方法 - Qiita
SQLite入門
PythonからSQLite3で初めてのデータベース! - Qiita

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6