5

Pyramid アプリケーションで SQLAlchemy を使用しており、'format' パラメータスタイルを使用する必要があります。例えば:

DBSession.execute('SELECT id FROM users WHERE email = %s;', email)

これは理論的には機能するはずですが、sqla エラーが発生します。

('SQL Error!', AttributeError("'list' object has no attribute 'keys'",))

文字列でありemail、リストではありません。タプルを使用してみましたが、同じエラーが発生します (ただし、「リスト」ではなく「タプル」と表示されます)。

pg8000DBドライバーとして使用しています。

クエリにパラメーターを他にどのように指定すればよいですか?

4

2 に答える 2

8

セッションのメソッドを使用するexecuteと、パラメーターの処理は SQLAlchemy によって行われるため、次のようなものが必要になります。

DBSession.execute('SELECT id FROM users WHERE email = :email;', {'email': email})

ただし、execute代わりにエンジンのメソッドを使用する場合、パラメーターの処理は基礎となる DB-API によって行われます。この場合は pg8000 です。

DBSession.bind.execute('SELECT id FROM users WHERE email = %s;', email)

とにかく、私は常に前者に固執し、さまざまなドライバー/データベース間で一貫した方法でパラメーターを処理できるようにしています。

于 2013-01-17T08:27:06.580 に答える
1

http://pybrary.net/pg8000/dbapi.html#pg8000.dbapi.CursorWrapper.executeを読むと、次のようpg8000.dbapi.paramstyleに設定されているように見えるため、次のようなnamedマッピングが期待されます。

DBSession.execute('SELECT id FROM users WHERE email = %(email)s', {'email': email})

最も柔軟なオプションのように見えるものを設定paramstyleしたいようです-シーケンスまたはマッピングを許可します(または、必要ない場合は単にするかもしれません)。pyformatformat

于 2012-07-20T12:46:26.637 に答える