仮想サーファーの波乗り

仮想化エンジニアの日常

プログラミング・SNS分析・仮想通貨・自動化などに関してよく書きます。

SQLAlchemyで「AttributeError: 'Table' object has no attribute 'xxx'」

SQLAlchemyで「AttributeError: 'Table' object has no attribute 'xxx'」というエラーが出て、なんでかなとちょっと詰まったのでメモ。

以下のような処理を記述したファイルを実行すると...

# coding=utf-8
import os
from sqlalchemy import create_engine
from sqlalchemy import *
from sqlalchemy.orm import *
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from entity.twitter_user_entity import TwitterUser

# 環境変数からDB接続情報取得
MYSQL_USER = os.environ['MYSQL_USER']
MYSQL_PASSWORD = os.environ['MYSQL_PASSWORD']
MYSQL_HOST = os.environ['MYSQL_HOST']
MYSQL_DB = os.environ['MYSQL_DB']

# MySQL接続
engine = create_engine('mysql://{user}:{password}@{host}/{db}'
                       .format(user=MYSQL_USER, password=MYSQL_PASSWORD, host=MYSQL_HOST, db=MYSQL_DB),
                       encoding='utf-8', echo=False)

# トランザクション開始
Session = sessionmaker(bind=engine)
session = Session()

# user_screen_nameからuser_idを取得する
user_id = session.query(TwitterUser).filter(TwitterUser.user_screen_name == user_screen_name).one().twitter_user_id

# トランザクション終了
session.close()

以下のようなエラーが。

AttributeError: 'Table' object has no attribute 'twitter_user_id'

テーブルにそのままカラム名書くだけじゃ値取れないのかな??

と思っていろいろ調べていると、そもそも「session.query(TwitterUser).filter(TwitterUser.user_screen_name == user_screen_name).one()」でユーザーが取得できていなかった = DBに対象データが登録できていなかったからエラーになっていました。


エラー文大事...