नहीं, SQL पैरामीटर केवल स्केलर से निपटते हैं मूल्य। आपको यहां एसक्यूएल जेनरेट करना होगा; अगर आपको कच्चे SQL की आवश्यकता है, तो उपयोग करें:
statement = "SELECT * FROM table WHERE `key`='rating' AND uid IN ({})".format(
', '.join([':i{}'.format(i) for i in range(len(some_list))]))
my_sess.execute(
statement,
params={'i{}'.format(i): v for i, v in enumerate(some_list)})
).fetchall()
जैसे some_list
. में सभी मान रखने के लिए पर्याप्त पैरामीटर जेनरेट करें स्ट्रिंग स्वरूपण के साथ, फिर उन्हें भरने के लिए मिलान करने वाले पैरामीटर जेनरेट करें।
एक शाब्दिक_स्तंभ ()
वस्तु
आपके लिए सभी उत्पादन करने के लिए:
from sqlalchemy.sql import literal_column
uid_in = literal_column('uid').in_(some_list)
statement = "SELECT * FROM able WHERE `key`='rating' AND {}".format(uid_in)
my_sess.execute(
statement,
params={'uid_{}'.format(i): v for i, v in enumerate(some_list)})
).fetchall()
लेकिन तब आप शायद `sqlalchemy.sql.expression मॉड्यूल का उपयोग करके संपूर्ण विवरण उत्पन्न कर सकते हैं, क्योंकि यह एकाधिक डेटाबेस बोलियों का समर्थन करना बहुत आसान बना देगा।
इसके अलावा, uid_in
ऑब्जेक्ट पहले से ही बाइंड पैरामीटर के लिए सही मानों के संदर्भ रखता है; इसे एक स्ट्रिंग में बदलने के बजाय जैसा कि हम str.format()
. के साथ करते हैं उपरोक्त क्रिया, SQLAlchemy में वास्तविक वस्तु और संबंधित पैरामीटर होंगे और अब आपको params
उत्पन्न करने की आवश्यकता नहीं होगी शब्दकोश या तो ।
निम्नलिखित कार्य करना चाहिए:
from sqlalchemy.sql import table, literal_column, select
tbl = table('table')
key_clause = literal_column('key') == 'rating'
uid_clause = literal_column('uid').in_(some_list)
my_sess.execute(select('*', key_clause & uid_clause, [tbl]))
जहां sqlalchemy.sql. चुनें ()
एक कॉलम स्पेक लेता है (यहां *
. को हार्ड-कोड किया गया है ), जहां क्लॉज (&
. के साथ दो क्लॉज से उत्पन्न होता है) एक SQL और
उत्पन्न करने के लिए खंड) और चयनों की एक सूची; यहाँ आपका एक sqlalchemy.sql .टेबल ()
मूल्य।
त्वरित डेमो:
>>> from sqlalchemy.sql import table, literal_column, select
>>> some_list = ['foo', 'bar']
>>> tbl = table('table')
>>> key_clause = literal_column('key') == 'rating'
>>> uid_clause = literal_column('uid').in_(some_list)
>>> print select('*', key_clause & uid_clause, [tbl])
SELECT *
FROM "table"
WHERE key = :key_1 AND uid IN (:uid_1, :uid_2)
लेकिन इन सब से उत्पन्न वास्तविक ऑब्जेक्ट ट्री में बाइंड पैरामीटर के लिए भी वास्तविक मान होते हैं, इसलिए my_sess.execute()
इन्हें सीधे एक्सेस कर सकते हैं।