2016-03-30 22 views
4

Dinamik olarak oluşturulmuş bir ham sorgu yürütmeye çalışıyorum. Parametrelerin geçerli konumlara eklendiğinden emin olmak için adlandırılmış parametreler kullanıyorum.Django: Ham SQL sorgusunda adlandırılmış parametreleri kullanma

Bu Sqlite için sorunsuz çalışıyor gibi görünüyor. (Tüm testler başarılı) Ama mariadb karşı aynı kodu koşuyorum zaman ..

Basit bir örnek sorgu başarısız:

SELECT u.* 
    FROM users_gigyauser AS u 
    WHERE u.email like :u_email 
    GROUP BY u.id 
    ORDER BY u.last_login DESC 
    LIMIT 60 OFFSET 0 

Parametreler şunlardır:

{'u_email': '%test%'} 

hatası Parametre değiştirilmediğinden varsayılan bir sözdizimi hatası alıyorum. Bir gösterge olarak '%' kullanarak çalıştı, ancak bu

%u[_email] 

ayrıştırmak çalışırken sql sonuçlandı ve bu tip hata döndürdü.

ben gibi sorgu yürütme ediyorum:

raw_queryset = GigyaUser.objects.raw(self.sql_fetch, self._query_object['params']) 

Veya sayarken:

cursor.execute(self.sql_count, self._query_object['params']) 

İkisi (':' kullanarak göstergesi) SQLite aynı mariadb hatayı ama iş vermek

Şimdi neyi özlüyorum?

+0

% (u_email) kullanılarak dokümanlar belirtilen (https://docs.djangoproject.com/en/1.8/topics/db/sql /) "tamamlanmayan bir biçim" hatasıyla sonuçlanır. btw –

+1

docs, '% (u_email) s' ('s' sonekini fark et) diyor – yedpodtrzitko

+0

TNX !!!!! Bu yorumu cevap olarak yazarsanız, bu yanıt olarak işaretlenebilir. –

cevap

4

düzenleme:

biçimi şu şekilde s sonek olması gerekir

:

%(u_email)s 
+0

ORM'yi kullanmamanın bir nedeni var, .. ve iyi bir tane. sql-enjeksiyon için korkmuyorum ... bu da sorun değil. –

+0

'iyi sebebi' paylaşır mısınız? – yedpodtrzitko

+2

Django orm, basit nesne ile ilgili veritabanı sorguları için iyidir. Ancak, veritabanı yapınız daha gelişmiş hale gelir ve kesin raporlar/seçimler oluşturmanız gerekir. Bir javascript aracı tarafından oluşturulan dinamik json nesnesine dayalı özel seçimler oluşturmam gerekiyor. –

İlgili konular