SqlAlchemy クエリの簡単なサンプル

SqlAlchemy を使うなら、テーブルカラム構造のエンティティモデルObjectとの
マッピングとしてクエリを書くのが教科書っぽい(スクエアな:square...)のであろう。。

エンティティモデル定義を書かない方法

# -*- coding: utf-8 -*-
import sqlalchemy as dbMapper
from sqlalchemy import text

url = 'mysql+pymysql://username:passwd@localhost:3306/dbname'
engine = dbMapper.create_engine(url, echo=True)

with engine.connect() as conn:
    sql = 'SELECT * FROM t_games'
    rows = conn.execute(text(sql))
    for row in rows:
        print(row)

テーブルカラム構造を定義していないけれど、カラム名参照ができる。

        print(row.item_name)

エンティティモデル定義を書く方法
別ソースでエンティティを書く
models.py で、テーブル構造を定義

# -*- coding: utf-8 -*-
import sqlalchemy as db
from sqlalchemy.orm import registry

mapper_reg = registry()
Base = mapper_reg.generate_base()

class Game(Base):
    __tablename__ = 't_games'
    id = db.Column(db.INT, autoincrement=True, primary_key=True)
    item_name = db.Column(db.String(48), nullable=False)
    disp_price = db.Column(db.INT, nullable=False)
    calprice = db.Column(db.INT, nullable=False)
    create_at = db.Column(db.TIMESTAMP, nullable=True)

読込み実行のコード

# -*- coding: utf-8 -*-
import sqlalchemy as dbMapper
from sqlalchemy.orm import sessionmaker, scoped_session
from models import Game

url = 'mysql+pymysql://username:passwd@localhost:3306/dbname'
engine = dbMapper.create_engine(url, echo=True)
Session = scoped_session(sessionmaker(autocommit=False, autoflush=False, bind=engine))

session = Session()
result = session.query(Game).first()
print(result.item_name)

.first() で取得結果の先頭を取得しているが、.first()を使わないのであれば、
配列として受けた結果から先頭インデックス[0] で参照する

result = session.query(Game)
print(result[0].item_name)

scoped_session で、sessionmakerをラップするようにすれば、
マルチスレッド対応(別セッション)になるので、この方法を多用するであろう。