2017-02-23 15 views
0

にSQL式を回す私はSQL錬金術で私が書くしようとしているこのSQL式を持ってSQLAlchemyのクエリ

select * from candidates1 c 
inner join uploaded_emails1 e 
    on c.id=e.candidate_id 
group by e.thread_id 

どのように私はそれをやって行くのでしょうか?

+0

何を試しましたか?結果は何でしたか? – daveruinseverything

+0

この例では、データベーステーブルとリレーションシップをSQLAlchemyモデルにマップするモデル、クラスを作成する必要があります。この例では、コードを記述するのではなく、独自のコードを記述することができます。モデルを定義したら、実際のクエリを表現することはかなり簡単です。あなたがこれほど遠くないなら、この主題をカバーするSQLAlchemyのチュートリアルをチェックしてください – daveruinseverything

答えて

0

execute methodがそうのように、生のSQLを実行するために使用することができます:

from sqlalchemy import text 
sql = text('select * from candidates1 c inner join uploaded_emails1 e on c.id=e.candidate_id group by e.thread_id') 
result = db.engine.execute(sql) 
... do stuff ... 

あなたはあなたが作業しているいくつかのモデルを持っている場合は、候補者間のone-to-many relationshipを作成するために、関係のフィールドタイプを使用することができますそして、UploadedEmailは、そのよう:

class Candidate(Base): 
    __tablename__ = 'candidates1' 
    id = Column(Integer, primary_key=True) 
    uploaded_emails = relationship("UploadedEmail", lazy='dynamic') 

class UploadedEmail(Base): 
    __tablename__ = 'uploaded_emails1' 
    id = Column(Integer, primary_key=True) 
    candidate_id = Column(Integer, ForeignKey('candidate.id')) 
    thread_id = Column(Integer) 

そして、あなたのコードでは、あなたは

group_byを含む)は、このようなものを使用する場合があります

選択する列を指定するには.with_entities句を使用し、次にthread_id列を指定する必要があることに注意してください。これをしないと、 "SELECTリストの式#XはGROUP BY句にはなく、集約されていない列を含んでいます...これはGROUP BY句の列に機能的に依存しません; sql_mode = only_full_group_by "と互換性がありません。

0

申し訳ありません申し訳ありませんが、質問に回答するのに十分な情報がありませんでした。これで作業が終了しました:

x = db_session.query(Candidate1, Uploaded_Emails1).filter(Candidate1.id == Uploaded_Emails1.candidate_id).group_by(Uploaded_Emails1.thread_id).all() 
関連する問題