###前提・実現したいこと
Python 3.6.1とSQLAlchemy1.1.12の勉強のため、CSVからSQLiteにデータを登録するサンプルプログラムを実行しました。
エディタはVSCode 1.14.2を使用し、PyLint 1.7.2をインストール(拡張)しています。
そこで、PyLintがエラーを指摘するのですが、実行時にはエラーになりません。おそらくコードとしては問題ないと思っています。
PyLintがエラーと誤認しない設定方法が知りたくご相談です。
###発生している問題・エラーメッセージ
'E1101:Instance of 'SessionContext' has no 'add' member' at: '62,9' 'E1101:Instance of 'SessionContext' has no 'query' member' at: '67,15'
###該当のソースコード
# -*- coding: utf-8 -*- from sqlalchemy.engine import create_engine from sqlalchemy.orm.session import sessionmaker from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.schema import Column from sqlalchemy.types import Integer, String Base = declarative_base() class SessionFactory(object): def __init__(self, sql_connection, echo=False): self.engine = create_engine(sql_connection, echo=echo) Base.metadata.create_all(self.engine) def create(self): Session = sessionmaker(bind=self.engine) return Session() class SessionContext(object): def __init__(self, session): self.session = session def __enter__(self): return self.session def __exit__(self, exc_type, exc_value, traceback): self.session.flush() self.session.commit() self.session.close() class SessionContextFactory(object): def __init__(self, sql_connection, echo=False): self.session_factory = SessionFactory(sql_connection, echo) def create(self): return SessionContext(self.session_factory.create()) # お試しマッピングクラス class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String) def __repr__(self): return '<User(%d, %s)>' % (self.id, self.name) if __name__ == '__main__': sc_factory = SessionContextFactory('sqlite:///sqlite3.db', False) with sc_factory.create() as session: # session を使って色々やる new_user = User(name='amedama') session.add(new_user) # インデントを抜けたら session は commit/close 済み pass # session が必要になったら、もう一度 with を使う with sc_factory.create() as session: print(session.query(User).all())
###補足情報(言語/FW/ツール等のバージョンなど)
ソースコードは、「Python の with 文で SQLAlchemy のセッションを管理する」を参考にさせて頂きました。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。