Belirli olayları yakalamak için bir veritabanında arama yapmaya çalışıyorum. Benim sorgu Basitçe ben takvim olayların bir veri tabanı üzerinden bakmak ve içinde ve bu ay başında sonra 'test' ile özetiyle şey dönmek için sorgu ihtiyaç koymak Joker kullanarak Psycopg2 neden TypeError
SELECT * FROM events WHERE summary ILIKE E'%test%' AND start_time > '2010-10-01'
gibi olduğunu.
Bu, veritabanı komut satırından sorgulandığında beklenen sonuçları döndürür. Ben gibi psycopg2 ile benim Python komut kullanmak girişiminde Ancak zaman:
cursor.execute("SELECT * FROM events WHERE summary ILIKE E'%test%' AND start_time > %(begin)s ", {'begin' : datetime.datetime(2010,10,1) })
Bir tür hatası
*** TypeError: 'dict' object does not support indexing
ben kullanıyorum yolu ile bir şey gibi geliyor Googling bazı ilk Doing olsun benim joker karakterlerim. Yine de yanılıyor olabilirim ve muhtemelen görmediğim basit bir şeyi özlüyorum. Umarım topluluğun yeni bir çift gözü, noobishness'imi düzeltebilir;)
Hm. Ama ben, bu sözlükten kurtulmak ve sadece joker karakterin gerçekten kaçmadığından emin olmak için herhangi bir değişiklik olmaksızın koşmak zorunda kaldığım için uğraştığım için asıl sorun olduğuna inanmıyorum. Sözlükden kurtulmak için bir sözlük kullanıldığında neden joker karakterden kaçmalıyım? –
Temel parametre değiştirme işlemi '%' ifadesini özel bir karakter olarak kullanır; bu, 'hey, burada benim tarifemden bir değer alır' anlamına gelir. Tahminimce, eğer bu kuralı geçmezseniz, bu parametreleme mantığı tamamen atlanır, böylece nerede bulunduğunuz maddede '%' varlığı ile karıştırılmasının bir şansı yoktur. Diğer bir deyişle, muhtemelen artık yapmadığınız parametre adımı * içinde boğulma olasılığı vardır. Yani parametrelerden geçiyorsanız, özel% karakterden kaçmanız gerekir, aksi halde değil. –
Tamam, bu mantıklı. Teşekkürler bayım! –