मुझे SQLAlchemy डेटाबेस को इसके id
समान कुछ से क्वेरी करने की आवश्यकता है
User.query.filter_by (उपयोगकर्ता नाम = 'पीटर')
लेकिन आईडी के लिए। मैं यह कैसे करु? [Google और SO पर खोज करने से मदद नहीं मिली]
मुझे SQLAlchemy डेटाबेस को इसके id
समान कुछ से क्वेरी करने की आवश्यकता है
User.query.filter_by (उपयोगकर्ता नाम = 'पीटर')
लेकिन आईडी के लिए। मैं यह कैसे करु? [Google और SO पर खोज करने से मदद नहीं मिली]
जवाबों:
क्वेरी में एक फ़ंक्शन है जो तालिका की प्राथमिक कुंजी द्वारा क्वेरी का समर्थन करता है, जो मुझे लगता है कि id
है।
उदाहरण के लिए, 23 की आईडी के साथ किसी ऑब्जेक्ट के लिए क्वेरी करने के लिए:
User.query.get(23)
नोट: जैसा कि कुछ अन्य टिप्पणीकारों और उत्तरों ने उल्लेख किया है, यह "प्राथमिक कुंजी पर एक क्वेरी फ़िल्टरिंग निष्पादित करें" के लिए बस आशुलिपि नहीं है। SQLAlchemy सत्र की स्थिति के आधार पर, यह कोड डेटाबेस को क्वेरी कर सकता है और एक नया उदाहरण लौटा सकता है, या यह वास्तव में डेटाबेस को क्वेरी किए बिना आपके कोड में पहले से उद्धृत ऑब्जेक्ट का एक उदाहरण लौटा सकता है। यदि आपने पहले से ऐसा नहीं किया है, तो असर को समझने के लिए SQLAlchemy सत्र पर प्रलेखन पढ़ने पर विचार करें ।
YourModel.query.get((pk1, pk2))
:। टपल को नोटिस करें।
आप इस तरह से id = 1 के साथ एक यूजर को क्वेरी कर सकते हैं
session.query(User).get(1)
प्राप्त करें () आपकी अपेक्षा के अनुरूप नहीं है:
यदि आपका लेनदेन किया गया था:
>>> session.query(User).get(1)
[SQL]: BEGIN (implicit)
[SQL]: SELECT user.id AS user_id, user.name AS user_name, user.fullname AS user_fullname
FROM user
WHERE user.id = ?
[SQL]: (1,)
<User(u'ed', u'Ed Jones')>
यदि आप लेन-देन में हैं (प्राप्त करें) आपको डेटाबेस से क्वेरी किए बिना मेमोरी में परिणाम वस्तु देगा):
>>> session.query(User).get(1)
<User(u'ed', u'Ed Jones')>
इसका उपयोग करने के लिए बेहतर है:
>>> session.query(User.name).filter(User.id == 1).first()
[SQL]: SELECT user.name AS user_name
FROM user
WHERE user.id = ?
LIMIT ? OFFSET ?
[SQL]: (1, 1, 0)
(u'Edwardo',)
get()
आपको स्मृति में परिणाम वस्तु देने के लिए प्रतीत होता है (वास्तव में डेटाबेस को क्वेरी किए बिना), लेकिन filter().first()
हमेशा डेटाबेस को क्वेरी करेगा।
get
दक्षता में वृद्धि के कारण उपयोग करना बेहतर है।
get
अधिक कुशल है।
यदि आप उपयोग करते tables reflection
हैं तो आपको दिए गए समाधानों के साथ समस्या हो सकती है। (यहाँ पिछले समाधान मेरे लिए काम नहीं किया)।
मैंने जो प्रयोग किया वह था:
session.query(object._class_).get(id)
( object
डेटाबेस से प्रतिबिंब द्वारा पुनर्प्राप्त किया गया था, यही कारण है कि आपको उपयोग करने की आवश्यकता है .__class__
)
आशा है कि ये आपकी मदद करेगा।
सबसे पहले, आपको id
प्राथमिक कुंजी के रूप में सेट करना चाहिए ।
तब आप query.get()
ऑब्जेक्ट को क्वेरी करने के लिए विधि का उपयोग कर सकते हैं id
जिसके द्वारा पहले से ही प्राथमिक कुंजी है।
query.get()
प्राथमिक कुंजी द्वारा वस्तुओं को क्वेरी करने की विधि के बाद से ।
फ्लास्क- SQLAlchemy प्रलेखन से प्रभावित
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
db = SQLAlchemy()
db.init_app(app)
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
def test():
id = 1
user = User.query.get(id)