2017-02-07 25 views
0

私のクエリの結果をコンソールに出力しようとしましたが、以下のコードで表示されますが、代わりにオブジェクトの場所が返されます。私が手オブジェクトの代わりにsqlalchemyの結果を出力します

test = connection.execute('SELECT EXISTS(SELECT 1 FROM "my_table" WHERE Code = 08001)') 
print(test) 

結果がある - 私はvalueの代わりに、オブジェクトを印刷するにはどうすればよい<sqlalchemy.engine.result.ResultProxy object at 0x000002108508B278>

理由私は比較テストに値を使用したいと思っているからです。 EG:

if each_item not in test: 
    # do stuffs 

答えて

2

このように、testには、クエリによって返されたすべての行が含まれています。

繰り返し処理が必要な場合は、たとえばfetchallを使用できます。このように:

test = connection.execute('SELECT EXISTS(SELECT 1 FROM "my_table" WHERE Code = 08001)').fetchall()

次に、あなたは、行のリストを反復処理することができます。各行にはすべてのフィールドが含まれます。あなたの例では、フィールドをその位置でアクセスできます。あなたは1位に1つしかありません。だからあなたは1にアクセスできます:

for row in test: 
    print(row[0]) 
+0

Hmm、これは私に「0」を返します。なぜ分かりません –

+0

いいえ。理由を知っていると思う。それは 'string'のようにSQLに格納されていますので、それが' 0'を返した理由です。 –

+0

数値であれば、先行ゼロはありません。問題を再現すると、 'string'ではなく' number'を使いました。 – DonTintoretto

0

testは、行の値を含むオブジェクトです。したがって、列の名前がvalueの場合は、test.valueを使用して呼び出すことができます。

testの各列を反復するなど、より便利な方法をお探しの場合は、これらの関数を明示的に定義する必要があります(testのメソッドまたは反復するように設計された他の関数これらのタイプの行を介して)。

関連する問題