【17/8/9】副業6日目

Ryo Uehara
Aug 9, 2017 · 5 min read

前回は、sqlalchemyの reflectを使って、DBからテーブル情報を取得してModelを作成・表示するところまで確認した。

今日は、実際にDBを操作するところまでやってみる。

# -*- coding: utf-8 -*-
import sys
import sqlalchemy
from sqlalchemy.ext.automap import automap_base
from sqlalchemy.orm import sessionmaker
from sqlalchemy.engine import create_engine
# エンジンの生成(実環境に合わせて設定)
engine = create_engine(“mysql://root:P@ssw0rd@localhost:3306/app1_db”)
conn = engine.connect()
# セッション開始
session = sessionmaker(bind=engine)()
# mappedなinstanceをリフレクションを使った上で生成
base = automap_base()
base.prepare(engine, reflect=True)
# 適当にやりたいことを
blog_post = base.classes.blog_post
result = session.query(blog_post)
for row in result:
print(row.id)
print(row.title)
print(row.text)
print(row.created_date)
print(row.published_date)
print(row.author_id)
# セッション終了
session.close()

実行結果

1
????????
??????????????????????????
2017–08–04 11:03:06
None
1

日本語が文字化けしているので、3日目で使ったDjangoにデフォルトで設定されている管理者画面(python manage.py runserver 0.0.0.0:8000で起動。http://192.168.1.65:8000/admin/)からblog_postというアプリに適当に登録して、再実行したところ、うまく表示された。

1
????????
??????????????????????????
2017–08–04 11:03:06
None
1
4
test title
test massage
2017–08–09 11:54:49
2017–08–09 11:55:05
1

これで、自分でModelを作らずとも、DB情報を取得してModelを生成しDBを操作できるようになった。

次は、実際に使う時のためにどういったクエリが書けるか調べてみる。

# データを検索
result = session.query(blog_post)
# データを検索 :all()を指定すると、リストで結果が取得できます。
result = session.query(blog_post).all()
# first()を指定すると、最初の1つが取得できます。
result = session.query(blog_post).first()
※変数の中にはひとつしか値が入らないため、for文でiterationできなくなります。
# filter_byを指定すると、SQLのWhere区のように検索条件が指定できます。
result_all = session.query(blog_post).filter_by(id='2')
# order_byを指定すると、SQLのorder_by区のように並び替えができます。
result_all = session.query(blog_post).order_by('id desc')
※「ascが昇順」または「descが降順」
# count()を指定すると、登録されている行数の合計値を取得できます。
count = session.query(blog_post).count()

365日備忘録

Full Stack Engineerを目指して

    Ryo Uehara

    Written by

    365日備忘録

    Full Stack Engineerを目指して

    Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
    Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
    Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade