2016-12-05 8 views
1

私はSQLAlchemyを使ってデータ処理を行い、いくつかのテーブルを作成しています。私はテーブルorm_tableからDeclarative BaseクラスORMTableで定義されたデータをロードしていますので、session.query(ORMTable).all()ステートメントでデータベースに問い合わせることができます。SQlAlchemy ORMセッションから既存のテーブルを照会する方法は?

ただし、データベースにすでに存在し、ormで定義されていない別のテーブルnon_orm_tableも照会する必要があります。同じセッション内でこのテーブルをクエリするにはどうすればよいですか?私はそれに関連するクラスを持っていないので、そのような場合の標準的な練習は何ですか?

+0

既存のテーブルのモデルを定義できますか? – Simon

+0

それが必要なら私はできます。しかし、テーブルは既に存在しているので、関心のある特定のテーブルの情報をORMが処理できるものにプルする方法があることを願っています。 – sfactor

+1

sqlalchemy.ext.automapを見てください。 :-) – Simon

答えて

1

ここでそれを作るためのコードスニペットは、次のとおりです。

from sqlalchemy import create_engine 
from sqlalchemy.ext.declarative import declarative_base 
from sqlalchemy.orm import sessionmaker 

engine = create_engine('<db_connection_string>', echo=True) 
Base = declarative_base(engine) 


class NonOrmTable(Base): 
    """ 
    eg. fields: id, title 
    """ 
    __tablename__ = 'non_orm_table' 
    __table_args__ = {'autoload': True} 


def loadSession(): 
    """""" 
    metadata = Base.metadata 
    Session = sessionmaker(bind=engine) 
    session = Session() 
    return session 


if __name__ == "__main__": 
    session = loadSession() 
    res = session.query(NonOrmTable).all() 
    print res[1].title 

キーはSqlAlchemy’s autoload属性を使用することです。既存のテーブルフィールド名をクラスに動的にマッピングします。

私はそれが役に立ちそうです。

+0

も__table_args__に 'autoload_with'を使用しなければなりませんでしたが、これは確かに助けになりました。まさに私が探していたものです。ありがとう!私はあなたの答えを受け入れました。 – sfactor

+0

ええ、あなたはまだ既存のテーブルとクラスをバインドする必要があります。 – ichbinblau

関連する問題