LoginSignup
1
2

More than 3 years have passed since last update.

PythonでシンプルにDBへアクセスできる dataset を試す

Last updated at Posted at 2019-06-09

はじめに

PythonでシンプルにDBへアクセスできる dataset を試しました。

前提条件

以下がインストール済みであることを前提とします。
- pipenv
- sqlite3

動作確認した環境のバージョンは以下のとおりです。

$ pipenv --version
pipenv, version 2018.11.26
$ sqlite3 --version
3.16.0 2016-11-04 19:09:39 0e5ffd9123d6d2d2b8f3701e8a73cc98a3a7ff5f

環境構築

$ mkdir sample && cd sample
$ pipenv --python 3.7
$ pipenv install dataset
$ cat <<EOF | sqlite3 ./sqlite3.db
CREATE TABLE depts(id integer primary key autoincrement, name text);
CREATE TABLE users(id integer primary key autoincrement, name text, email text, dept_id integer);
insert into depts (name) values ('A');
insert into depts (name) values ('B');
insert into depts (name) values ('C');
EOF

ソースコード

test.py
#!/usr/bin/env python
import dataset, traceback, json

db = dataset.connect('sqlite:///sqlite3.db')

users = db['users']

try:
    db.begin()

    users.delete()

    users.insert(dict(name='test1', email='test1@example.com', dept_id=1))
    users.insert(dict(name='test2', email='test2@example.com', dept_id=2))
    users.insert(dict(name='test3', email='test3@example.com', dept_id=3))
    users.insert(dict(name='test4', email='test3@example.com', dept_id=3))
    users.insert(dict(name='test5', email='test3@example.com', dept_id=3))

    db.commit()

except Exception as e:
    traceback.print_exc()
    db.rollback()

rows = db.query("""
    select
        u.id
        , u.name
        , u.email
        , u.dept_id
        , d.name as dept_name
    from users u
    left join depts d
        on u.dept_id = d.id
    where
        u.dept_id = :dept_id
""", dept_id=3)

print("Result:")
for row in rows:
    print(json.dumps(row))

実行

$ pipenv run python test.py
Result:
{"id": 3, "name": "test3", "email": "test3@example.com", "dept_id": 3, "dept_name": "C"}
{"id": 4, "name": "test4", "email": "test3@example.com", "dept_id": 3, "dept_name": "C"}
{"id": 5, "name": "test5", "email": "test3@example.com", "dept_id": 3, "dept_name": "C"}

とてもシンプルに書けていい感じです!!

1
2
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
1
2