2017-03-20 8 views
1

私は、私はこのようなSQLAlchemyのを使用して照会することができますPostgreSQLのストアドプロシージャを持っている:私は私のコードでcol_name == some_valueのようなものを使用する方法を知りたいSQLAlchemy(コア)の列にリテラルを作成するにはどうすればよいですか?

import sqlalchemy as sa 

engine = sa.create_engine(...) 

some_argument = 42 
some_value = 99 
for result in engine.execute(sa.select(['col_name']) 
           .select_from(sa.func.this_is_my_func_name(some_agument)) 
           .where('this part does not work')): 
    print(result) 

を。ここで

は動作しないいくつかのものです:

.where('col_name' == some_value) 
.where(sa.column('col_name') == some_value) 

私は私が探している正確に何が何かを発見していません。

.where(sa.text('col_name = :col_value')) 

、その後engine.execute(query, col_value=some_value)を、それが行うには非常に正しいことではないように思えることは:私行うことができます。

sql = sa.text(''' 
    SELECT 
     col_name 
    FROM 
     this_is_my_func_name(:argument) 
    WHERE 
     col_name = :value 
''') 
engine.execute(sql, argument=some_argument, value=some_value) 

私が考えているものを達成するためのより良い方法はありますか、私はちょうど全開sqlalchemy.textに行く必要があります。その時点で、私がちょうどすべきように思えますか?

答えて

1

私はが完全に間違っていたことがわかりますです。

問題が

sa.select(['col_name']) 

は、私たちが望む正確に何をされていないことを実際にしました。 Sqlalchemyはそれが列名であると推測しましたが、それはわかりませんでしたので、私に少し警告を与えていました。それは次のようになる必要がありました:

sa.select([sa.column('col_name')]) 

警告が表示されなくなります。しかしいずれの場合も、

.where(sa.column('col_name') == value) 

が正しい方法です。

関連する問題