EDIT:私は何とか、pythonの文字列の補間と連結の使用に関するpsycopg2のドキュメントに関する明確な警告を見逃していました。
それを行うための正しい方法は、生のSQLクエリを構築するためにSQLAlchemyのを使用することです:
from sqlalchemy import text
sql = text("SELECT * FROM table WHERE ST_DWithin(table.geog_column,
ST_GeographyFromText(\'SRID=4326;POINT(:long :lat)\'), :distance)")
data = {'long': longitude, 'lat': latitude, 'distance': distance}
result = conn.execute(sql, data)
以下のアプローチが間違っているとSQLインジェクションの影響を受けやすいです。私は参考のためにここに残しました。
私は間違いを見つけました。カフェインが飢えている他の人は、%s
を一重引用符で囲む必要があります。初心者ですが簡単に逃すことができます。
"SELECT * FROM table WHERE ST_DWithin(table.geog_column,
ST_GeographyFromText(\'SRID=4326;POINT('%s' '%s')\'), *'%s'*)"
引用符は私のために問題を修正しましたが、私は、これは正しいアプローチであるため、いくつかの入力を取得するには、ここでそれを残している場合、完全にわかりません。