विषय पर बढ़ें

क्वेरी सेट एजेंट

प्रासंगिक MToफ़ील्ड और seसीधे एक्सेस करते समय, संबंधित मॉडल की एक सूची वापस आ जाती है।

लेकिन यह क्वेरीसेट एपीआई के एक सबसेट को भी उजागर करता है, इसलिए आप मूल नमूना से सीधे संबंधित मॉडल को फ़िल्टर कर सकते हैं, बना सकते हैं, चुन सकते हैं।

!!!ध्यान दें कि, डिफ़ॉल्ट रूप से, सार्वजनिक Queryको केवल मूल नमूना से संबंधित मॉडल वापस करने के लिए फ़िल्टर किया गया है।

1
इसलिए यदि आप जारी करते हैं `post.categories.all()` आपको उस पोस्ट से संबंधित सभी श्रेणियां मिलेंगी, सभी तालिकाओं में नहीं।

!!!ध्यान दें कि QueryProके माध्यम से Queryविधियों तक पहुँचने पर, आपको सामान्य क्वेरी की तरह ऑब्जेक्ट गुणों का उपयोग करने की आवश्यकता नहीं है।

1
2
3
तो ध्यान दें कि यह है `post.categories.all()` और **नहीं** `post.categories.objects.all()` हाँ।

उपलब्ध Queryविधियों के बारे में अधिक जानने के लिए पर जाएं [प्रश्न][queries]

!!!चेतावनी Toसे संबंधित मॉडल क्वेरी करना मूल नमूना पर लोड किए गए संबंधित मॉडल की सूची को साफ करता है:

1
2
3
4
5
6
7
8
9
उदाहरण: `post.categories.first()` 1 संबंधित मॉडल की सूची के लिए .सेट करेगा -> पहले द्वारा लौटाए गए ()

उदाहरण 2: यदि पोस्ट में 4 श्रेणियां हैं तो `len(post.categories) == 4` कॉलिंग `post.categories.limit(2).all()`
-> केवल 2 बच्चों को लोड करेगा और अब `assert len(post.categories) == 2`

यह डेटा वापस करने वाले सभी QueryProविधियों के लिए होता है: `get`, `all` और `first` और में `get_or_create` यदि नमूना पहले से मौजूद है।

ध्यान दें कि मान द्वारा लौटाया गया `create` या में बनाया गया `get_or_create` और `update_or_create`
यदि नमूना मौजूद नहीं है तो उसे संबंध सूची में जोड़ा जाएगा (not clairing it).

डेटाबेस से डेटा पढ़ें

प्राप्त करें

प्राप्त करें (**kwargs): -> नमूना

नाम से फ़िल्टर किए गए प्रासंगिक मॉडल में से केवल एक प्राप्त करने के लिए, आप प्राप्त कर सकते हैं (**Kwargs) विधि।

1
2
3
4
5
6
7
8
9
# एक श्रेणी को पकड़ो
समाचार = = प्रतीक्षा करें (name = "News")

# ध्यान दें कि विधि श्रेणी लौटाती है ताकि आप इस मान को पकड़ सकें
# लेकिन यह संबंधित मॉडलों की सूची को भी संशोधित करता है
# इस बात की परवाह किए बिना कि पहले माता-पिता पर क्या लोड किया गया नमूना
# अब इसका केवल एक मूल्य है -> बस गेट () कॉल के साथ लोड किया गया है
लेन डालें (post.categories) == 1
पोस्ट करें। श्रेणियां [0] == समाचार

!!!टिप क्वेरी दस्तावेज़ में और पढ़ें

प्राप्त करें या बनाएं

get_or_create(_defaults: Optional[Dict[str, Any]] = None, **kwargs) -> Tuple[Model, bool]

मानदंडों को पूरा करने वाली पंक्तियों को प्राप्त करने का प्रयास, और यदि कोई Noअपवाद फेंक दिया जाता है, तो दिए गए kwarऔर \ _ डिफ़ॉल्ट के साथ एक नई पंक्ति बनाई जाती है।

!!!टिप क्वेरी दस्तावेज़ में और पढ़ें \ _ या \ _ बनाएं

सभी

all(**kwargs) -> List[Optional["Model"]]

संबंधित मॉडल की सूची प्राप्त करने के लिए, सभी () विधि का उपयोग करें।

कृपया ध्यान दें कि आप क्वेरी सेट को फ़िल्टर कर सकते हैं, प्रासंगिक का चयन कर सकते हैं, फ़ील्ड को बाहर कर सकते हैं, और इसी तरह सामान्य प्रश्नों की तरह।

1
2
3
4
5
6
7
# सभी Queryविधियों के साथ - फ़िल्टरिंग, कॉलम का चयन, गिनती आदि।
प्रतीक्षा करें (title__ines="M2M").all ()
प्रतीक्षा करें (posts__ator=Guido).get ()

कई संबंधों के # कॉलम मॉडल को पूर्वनिर्मित किया जा सकता है
news_posts = news.posts.select_related का इंतजार करें ("author").all ()
news_posts [0] पर जोर दें। लेखक = = गुइडो

!!!टिप क्वेरी दस्तावेज़ में और पढ़ें

पुनरावृत्ति

iterate(**kwargs) -> AsyncGenerator["Model"]

संबंधित मॉडलों पर पुनरावृत्त करने के लिए, पुनरावृत्त () विधि का उपयोग करें।

कृपया ध्यान दें कि आप क्वेरी सेट को फ़िल्टर कर सकते हैं, प्रासंगिक का चयन कर सकते हैं, फ़ील्ड को बाहर कर सकते हैं, और इसी तरह सामान्य प्रश्नों की तरह।

1
2
3
एक async जनरेटर के साथ इस पोस्ट की श्रेणियों पर #iterate
.ate () में श्रेणियों के लिए एसिंक:
    प्रिंट करें (category.name)

!!!टिप क्वेरी दस्तावेज़ पुनरावृत्ति में और पढ़ें

डेटाबेस में डेटा डालें/अपडेट करें

बनाएँ

बनाएँ (**kwargs): -> मॉडल

मूल नमूना से सीधे संबंधित मॉडल बनाएं।

डेटाबेस में लिंक की गई तालिकाओं और संबंधपरक आईडी स्वचालित रूप से आबाद हैं।

1
2
3
4
# उदाहरणों से कॉलम ऑब्जेक्ट बनाना:
प्रतीक्षा कर रहा है (name = "Tips")
लेन का दावा करें (waight post.categories.all ()) == 2
# नए बनाए गए उदाहरणों में पहले से ही डेटाबेस में संबंध बने हुए हैं

!!!टिप क्वेरी दस्तावेज़ निर्माण में और पढ़ें

कई-से-कई रिश्तों के लिए, यदि आप स्पष्ट रूप से प्रदान किए गए पास-थ्रू नमूना पर अतिरिक्त फ़ील्ड घोषित करते हैं, तो मापदंडों को पारित करने की एक अतिरिक्त क्षमता है जिसका उपयोग पास-थ्रू नमूना बनाने के लिए किया जाएगा।

इस तरह के नमूने को देखते हुए:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import databases
import ormar
import sqlalchemy

DATABASE_URL = "sqlite:///test.db"

ormar_base_config = ormar.OrmarConfig(
    database=databases.Database(DATABASE_URL), metadata=sqlalchemy.MetaData()
)


class Category(ormar.Model):
    ormar_config = ormar_base_config.copy(tablename="categories")

    id = ormar.Integer(primary_key=True)
    name = ormar.String(max_length=40)


class PostCategory(ormar.Model):
    ormar_config = ormar_base_config.copy(tablename="posts_x_categories")

    id: int = ormar.Integer(primary_key=True)
    sort_order: int = ormar.Integer(nullable=True)
    param_name: str = ormar.String(default="Name", max_length=200)


class Post(ormar.Model):
    ormar_config = ormar_base_config.copy()

    id: int = ormar.Integer(primary_key=True)
    title: str = ormar.String(max_length=200)
    categories = ormar.ManyToMany(Category, through=PostCategory)

आप निम्न तरीकों से बनाएँ () कॉल में नमूना द्वारा फ़ील्ड को आबाद कर सकते हैं:

1
2
3
4
5
6
7
पोस्ट = प्रतीक्षा पोस्ट (शीर्षक = "टेस्ट पोस्ट") .()
प्रतीक्षा कर रहा है
    नाम = "टेस्ट श्रेणी 1",
    # तर्क फ़ील्ड और कुंजियों के नामों के साथ एक शब्दकोश पास करते हैं
    # नमूना क्षेत्रों के माध्यम से
    पोस्टश्रेणी ={"sort_order": 1, "param_name": "volume"},
)

प्राप्त करें या बनाएं

get_or_create(_defaults: Optional[Dict[str, Any]] = None, **kwargs) -> Tuple[Model, bool]

मानदंडों को पूरा करने वाली पंक्तियों को प्राप्त करने का प्रयास, और यदि कोई Noअपवाद फेंक दिया जाता है, तो दिए गए kwarका उपयोग करके एक नई पंक्ति बनाई जाती है।

!!!टिप क्वेरी दस्तावेज़ में और पढ़ें \ _ या \ _ बनाएं

अपडेट या बनाएं

update_or_create(**kwargs) -> Model

नमूना अपडेट करें, या डेटाबेस में कोई मिलान नहीं होने पर एक नया नमूना बनाएं।

!!!टिप क्वेरी डॉक्यूमेंटेशन अपडेट \ _ या \ _ में और पढ़ें

अद्यतन

update(**kwargs, each:bool = False) -> int

अद्यतन की गई पंक्तियों की संख्या लौटाते हुए, प्रदान किए गए कीवर्ड मापदंडों के साथ संबंधित नमूना अपडेट करें।

!!!टिप क्वेरी दस्तावेज़ अपडेट में और पढ़ें

कृपया ध्यान दें कि फ़ील्ड नाम और फ़ील्ड शब्दकोश वाले मापदंडों को कई-से-कई संबंधपरक अपडेट के लिए भी स्वीकार किया जा सकता है।

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import databases
import ormar
import sqlalchemy

DATABASE_URL = "sqlite:///test.db"

ormar_base_config = ormar.OrmarConfig(
    database=databases.Database(DATABASE_URL), metadata=sqlalchemy.MetaData()
)


class Category(ormar.Model):
    ormar_config = ormar_base_config.copy(tablename="categories")

    id = ormar.Integer(primary_key=True)
    name = ormar.String(max_length=40)


class PostCategory(ormar.Model):
    ormar_config = ormar_base_config.copy(tablename="posts_x_categories")

    id: int = ormar.Integer(primary_key=True)
    sort_order: int = ormar.Integer(nullable=True)
    param_name: str = ormar.String(default="Name", max_length=200)


class Post(ormar.Model):
    ormar_config = ormar_base_config.copy()

    id: int = ormar.Integer(primary_key=True)
    title: str = ormar.String(max_length=200)
    categories = ormar.ManyToMany(Category, through=PostCategory)

ऊपर दिए गए उदाहरण में, आप निम्नलिखित कॉल में पोस्टश्रेणी के गुणों को अपडेट कर सकते हैं:

1
2
3
प्रतीक्षा कर रहा है।
            पोस्टश्रेणी ={"sort_order": 4}
        )

फ़िल्टरिंग और छँटाई

फिल्टर

filter(*args, **kwargs) -> QuerySet

आपको किसी भी नमूना विशेषता/फ़ील्ड द्वारा फ़िल्टर करने और FK संबंधों में फ़िल्टर का उपयोग करके उदाहरण प्राप्त करने की अनुमति देता है।

!!!टिप क्वेरी दस्तावेज़ फ़िल्टर में और पढ़ें

बाहर

exclude(*args, **kwargs) -> QuerySet

यह फ़िल्टर के समान ही काम करता है, और सभी संशोधक (प्रत्यय) समान हैं, लेकिन स्थिति वापस नहीं आती है।

!!!टिप क्वेरी दस्तावेज़ में और पढ़ें

आदेश आधार

order_by(columns:Union[List, str]) -> QuerySet

क्रमबद्ध करना का उपयोग करके \ _ by (), आप अपने द्वारा चुने गए फ़ील्ड द्वारा डेटाबेस में परिणामों को सॉर्ट कर सकते हैं।

!!!टिप क्वेरी दस्तावेज़ में और पढ़ें क्रमबद्ध करना \ _ by

जॉइन और सबक्वेरी

प्रासंगिक का चयन करें

select_related(related: Union[List, str]) -> QuerySet

संबंधित मॉडल को एक ही क्वेरी के दौरान प्रीफ़ेयर करने की अनुमति देता है।

चयन \ _ lated का उपयोग करते समय, डेटाबेस के खिलाफ हमेशा केवल एक क्वेरी चलती है, जो माध्य (sometimes complex) शामिल होने से उत्पन्न होता है और बाद में नेस्टेड मॉडल पायथन में संसाधित होते हैं।

!!!टिप क्वेरी दस्तावेज़ में चयनित \ _ lated के बारे में अधिक पढ़ें

प्रीफेच सहसंबंध

prefetch_related(related: Union[List, str]) -> QuerySet

इसे प्रश्नों के दौरान संबंधित मॉडल को प्रीफ़ेच करने की अनुमति है - लेकिन जैसा कि \ _ lated का चयन करने के लिए विरोध किया गया है, प्रत्येक बाद के नमूना को एक अलग डेटाबेस क्वेरी में प्राप्त किया जाता है।

pre\ _ lated के साथ, प्रत्येक नमूना डेटाबेस के खिलाफ एक क्वेरी चलाता है, जो माध्य आप एक के बाद एक कई प्रश्नों को निष्पादित करेंगे।

!!!टिप क्वेरी दस्तावेज़ pre\ _ lated में और पढ़ें

पृष्ठ और लाइनें

पेजिंग

paginate(page: int, page_size: int = 20) -> QuerySet

पृष्ठ संख्या और आकार के आधार पर ऑफसेट और सीमा विधियों को मिलाता है।

!!!टिप क्वेरी दस्तावेज़ टैब में और पढ़ें

प्रतिबंध

limit(limit_count: int) -> QuerySet

आप परिणामों को मूल मॉडल की आवश्यक संख्या तक सीमित कर सकते हैं।

!!!टिप क्वेरी दस्तावेज़ सीमाओं में और पढ़ें

ऑफसेट

offset(offset: int) -> QuerySet

आप मास्टर मॉडल की आवश्यक संख्या से परिणामों को ऑफसेट कर सकते हैं।

!!!टिप क्वेरी दस्तावेज़ ऑफ़सेट में और पढ़ें

स्तंभों का सबसेट चुनें

क्षेत्र

fields(columns: Union[List, str, set, dict]) -> QuerySet

फ़ील्ड () के साथ, आप डेटा लोड को सीमित करने के लिए नमूना स्तंभों का सबसेट चुन सकते हैं।

!!!टिप क्वेरी दस्तावेज़ फ़ील्ड में और पढ़ें

बहिष्करण क्षेत्र

exclude_fields(columns: Union[List, str, set, dict]) -> QuerySet

सिवाय \ _ फ़ील्ड () के साथ, आप डेटा लोडिंग को प्रतिबंधित करने के लिए नमूना स्तंभों के सबसेट का चयन कर सकते हैं।

!!!टिप \ _ फ़ील्ड को छोड़कर क्वेरी प्रलेखन में अधिक जानें

कुल फ़ंक्शन

गिनती

count(distinct: bool = True) -> int

दिए गए मानदंडों से मेल खाने वाली पंक्तियों की संख्या लौटाता है (यानी फ़िल्टर और बहिष्करण लागू करें)।

!!!टिप क्वेरी दस्तावेज़ गणना में और पढ़ें

मौजूद है

अस्तित्व () -> बूलियन

यह पुष्टि करने के लिए एक बूलियन मान लौटाता है कि क्या पंक्तियाँ हैं जो दिए गए मानदंडों को पूरा करती हैं (फ़िल्टर और बहिष्करण के साथ लागू)।

!!!टिप पढ़ें अधिक क्वेरी दस्तावेज़ मौजूद है