Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

SQLAlchemy जहां एकल मान में (कच्चा SQL)

नहीं, 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() इन्हें सीधे एक्सेस कर सकते हैं।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. जांचें कि क्या डेटाबेस में रिकॉर्ड पहले से मौजूद है

  2. MySQL:प्रोग्रामेटिक रूप से विदेशी कुंजी संबंधों को कैसे निर्धारित करें?

  3. Microsoft Access का उपयोग MySQL डेटाबेस के फ़्रंट-एंड के रूप में करना?

  4. विशाल PHP सरणी बनाम MySQL डेटाबेस?

  5. PHP त्रुटियाँ -> चेतावनी:mysqli_stmt::execute():mysqli_stmt नहीं ला सका | चेतावनी:mysqli_stmt ::बंद करें ()