2010-11-24 17 views
1

psycopg2エンジンを使用してdjangoでアプリケーションを作成する。必ずしも自分の弦を引用しているとは限りません。テストケースです:これらの文字列がpsycopg2によってクエリで引用されないのはなぜですか?

>>> from pypvs.search.models import Addr2zip 
>>> kwargs = { 
...  'street_name__iexact': 'Common Ground', 
...  'state_id__iexact': 'MT', 
... } 
>>> addrMatch = Addr2zip.objects.extra(
...  where = ['ctystate.zip5 = addr2zip.zip5 AND ctystate.city_name = \'%s\'' % 'Philipsburg'], 
...  tables = ['ctystate', 'addr2zip'] 
...).filter(**kwargs).order_by('zip5', 'street_name', 'primary_address_low', 'secondary_address_low') 
>>> print addrMatch.query 
SELECT "addr2zip"."addr2zip_id", "addr2zip"."zip5", "addr2zip"."zip4_low", "addr2zip"."zip4_high", "addr2zip"."street_direction", "addr2zip"."street_name", "addr2zip"."street_suffix", "addr2zip"."street_post_direction", "addr2zip"."primary_address_low", "addr2zip"."primary_address_high", "addr2zip"."primary_address_parity", "addr2zip"."secondary_address", "addr2zip"."secondary_address_low", "addr2zip"."secondary_address_high", "addr2zip"."secondary_address_parity", "addr2zip"."state_id", "addr2zip"."county_code", "addr2zip"."municipality_key", "addr2zip"."urbanization_key", "addr2zip"."record_type" FROM "addr2zip" , "ctystate" WHERE (ctystate.zip5 = addr2zip.zip5 AND ctystate.city_name = Philipsburg AND UPPER("addr2zip"."state_id"::text) = UPPER(MT) AND UPPER("addr2zip"."street_name"::text) = UPPER(Common Ground)) ORDER BY "addr2zip"."zip5" ASC, "addr2zip"."street_name" ASC, "addr2zip"."primary_address_low" ASC, "addr2zip"."secondary_address_low" ASC 

これらの文字列が引用されていない理由は何ですか?例えば、「共通の基盤」:

AND UPPER("addr2zip"."street_name"::text) = UPPER(Common Ground) 

問題は私の実装、psycopg2、またはDjangoのORMであるかどうかわかりません。私はどんな考えにも感謝します。

答えて

1

str(query)のみ、クエリの近似表現を返します。それをデータベースに渡そうとしていますか?

iexactで発行されたクエリはDjango 1.2.3で正しいと思われます。上記の結果はWHERE UPPER("addr2zip"."street_name"::text) = UPPER(E'Common Ground')になります。どのバージョンを使用していますか?

0

しかし、あなたは自分だけというようにそれを貼り付け:

where = ['ctystate.zip5 = addr2zip.zip5 AND ctystate.city_name = %s' % 'Philipsburg'], 

ので、あなたは構文エラーで構築されたクエリ文字列ました:

AND ctystate.city_name = Philipsburg 
+0

を。しかし、私が 'street_name'の元の投稿で使った例を見てください。 –

1

のようなものを使用、実行されるクエリを取得するために:私は1つということを得る

from django.db import DEFAULT_DB_ALIAS 
queryset.query.get_compiler(DEFAULT_DB_ALIAS).as_sql() 
関連する問題