ライブラリsqlite3を使うとPythonでデータベースSQLiteを利用することができる。
contextlibモジュールのclosingを使うとsqlite3のコネクションを
withを使って自動で閉じられるようになる。
import sqlite3
from contextlib import closing
with closing(sqlite3.connect('sample.db')) as con:
cursor = con.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS person
(name TEXT, age INTEGER, departmnet TEXT)
""")
cursor.execute("DELETE FROM person ;")
cursor.execute("INSERT INTO person VALUES ('Taro', 25, 'A1' );")
cursor.execute("INSERT INTO person VALUES ('Jiro', 20, 'B1' );")
cursor.execute("INSERT INTO person VALUES ('Hanako', 22, 'A2' );")
con.commit()
cursor.execute("SELECT name, age, departmnet FROM person;")
print(cursor.fetchall())
# => [('Taro', 25, 'A1'), ('Jiro', 20, 'B1'), ('Hanako', 22, 'A2')]
for person in cursor.execute("SELECT name, age, departmnet FROM person;"):
print(person)
# ('Taro', 25, 'A1')
# ('Jiro', 20, 'B1')
# ('Hanako', 22, 'A2')
con.close()
executemanyを使うと複数SQLの実行を一度にできる。
with closing(sqlite3.connect(':memory:')) as con:
cursor = con.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS person
(name TEXT, age INTEGER, departmnet TEXT)
""")
cursor.execute("DELETE FROM person ;")
date_list = [
('Taro', 25, 'A1'),
('Jiro', 20, 'B1' ),
('Hanako', 22, 'A2' ),
]
cursor.executemany("INSERT INTO person VALUES (? , ? , ? );", date_list)
con.commit()
params = {'age':20}
cursor.execute("SELECT * FROM person WHERE age >:age ;", params)
print(cursor.fetchall())
# => [('Taro', 25, 'A1'), ('Hanako', 22, 'A2')]
con.close()
「con.row_factory = sqlite3.Row」と指定することで、
cursor.executeの実行結果の使用の際、列名でのアクセスができるようになる。
with closing(sqlite3.connect(':memory:')) as con:
con.row_factory = sqlite3.Row
cursor = con.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS person
(name TEXT, age INTEGER, departmnet TEXT)
""")
cursor.execute("DELETE FROM person ;")
date_list = [
('Taro', 25, 'A1'),
('Jiro', 20, 'B1' ),
('Hanako', 22, 'A2' ),
]
cursor.executemany("INSERT INTO person VALUES (? , ? , ? );", date_list)
con.commit()
for person in cursor.execute("SELECT name, age, departmnet FROM person;"):
print(person['name'])
# 'Taro' 'Jiro' 'Hanako'
con.close()
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント