このトピックは、しばらくの間、ここでも他の場所でも対処されていません。 SQLAlchemy <Query object>
をpandas DataFrameに変換するソリューションはありますか?
Pandasにはpandas.read_sql
を使用する機能がありますが、これにはraw SQLの使用が必要です。私はそれを避けたい2つの理由があります:1)ORMを使用しているすべてのもの(すでにそれ自体の正当な理由)と2)クエリの一部としてpythonリストを使用しています(例えば:.db.session.query(Item).filter(Item.symbol.in_(add_symbols)
ここで、Item
は私のモデルクラスであり、add_symbols
はリストです)。これは、SQL SELECT ... from ... WHERE ... IN
と同等です。
何か可能ですか?
ほとんどの場合、以下が機能するはずです。
df = pd.read_sql(query.statement, query.session.bind)
パラメーターの詳細については、 pandas.read_sql
のドキュメントを参照してください。
初心者pandasプログラマーにこれをより明確にするために、ここに具体的な例を示します。
pd.read_sql(session.query(Complaint).filter(Complaint.id == 2).statement,session.bind)
ここでは、id = 2の苦情テーブル(sqlalchemyモデルはComplaint)から苦情を選択します。
エラーが発生し続けたため、選択したソリューションは機能しませんでした
AttributeError: 'AnnotatedSelect'オブジェクトには属性 'lower'がありません
私は次のものが働いていることを発見しました:
df = pd.read_sql_query(query.statement, engine)
パラメータと方言固有の引数を使用してクエリをコンパイルする場合は、次のようなものを使用します。
c = query.statement.compile(query.session.bind)
df = pandas.read_sql(c.string, query.session.bind, params=c.params)