PostgreSQL "दृढ़ता से टाइप किया गया" है - अर्थात, प्रत्येक क्वेरी में प्रत्येक मान का एक विशेष प्रकार होता है, या तो स्पष्ट रूप से परिभाषित किया जाता है (उदाहरण के लिए किसी तालिका में कॉलम का प्रकार) या परोक्ष रूप से (उदाहरण के लिए WHERE
खंड)। =
. सहित सभी फ़ंक्शन और ऑपरेटर , को विशिष्ट प्रकारों को स्वीकार करने के रूप में परिभाषित किया जाना है - इसलिए, उदाहरण के लिए VarChar =VarChar
के लिए एक ऑपरेटर है। , और int =int
. के लिए एक अलग ।
आपके मामले में, आपके पास एक कॉलम है जिसे स्पष्ट रूप से प्रकार के रूप में परिभाषित किया गया है int
, लेकिन आप इसकी तुलना उस मान से कर रहे हैं जिसे PostgreSQL ने text
. प्रकार के रूप में व्याख्यायित किया है ।
दूसरी ओर, SQLite, "कमजोर रूप से टाइप किया गया" है - मूल्यों को स्वतंत्र रूप से माना जाता है कि जो भी प्रकार की कार्रवाई की जा रही है, उसके लिए सबसे उपयुक्त है। तो आपके देव SQLite डेटाबेस में ऑपरेशन '42' =42
ठीक गणना की जा सकती है, जहां PostgreSQL को VarChar =int
की विशिष्ट परिभाषा की आवश्यकता होगी (या text =int
, पाठ
PostgreSQL में अनबाउंड स्ट्रिंग्स के लिए टाइप किया जा रहा है)।
अब, PostgreSQL कभी-कभी होगा सहायक बनें और प्रकारों को एक ज्ञात ऑपरेटर से मेल खाने के लिए अपने मूल्यों को स्वचालित रूप से "कास्ट" करें, लेकिन अधिक बार, जैसा कि संकेत कहता है, आपको इसे स्पष्ट रूप से करने की आवश्यकता है। यदि आप स्वयं SQL लिख रहे थे, तो एक स्पष्ट प्रकार का मामला WHERE id =CAST('42' AS INT)
जैसा दिख सकता है। (या WHERE CAST(id AS text) ='42'
)।
चूंकि आप नहीं हैं, आपको यह सुनिश्चित करने की आवश्यकता है कि आपके द्वारा क्वेरी जनरेटर को दिया गया इनपुट एक वास्तविक पूर्णांक है, न कि केवल एक स्ट्रिंग जो अंकों से युक्त होता है। मुझे संदेह है कि यह fields.IntegerField
. का उपयोग करने जितना आसान है के बजाय fields.CharField
, लेकिन मैं वास्तव में Django, या यहां तक कि पायथन को नहीं जानता, इसलिए मैंने सोचा कि मैं आपको इस उम्मीद में पृष्ठभूमि दूंगा कि आप इसे वहां से ले सकते हैं।