विषय पर बढ़ें

डेटाबेस में डेटा डालें

निम्नलिखित विधियाँ आपको डेटाबेस में डेटा सम्मिलित करने की अनुमति देती हैं।

  • बनाएँ (**Kwargs) -> मॉडल

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

  • update_or_create(**kwargs) -> Model

  • bulk_create(objects: List[Model]) -> None

  • मॉडल * Model.save () विधि * Mo.upsert () विधि \ * Model.save \ _ lated () विधि

  • क्वेरी सेट एजेंट * QuerysetProxy.create(**kwargs) विधि * QuerysetProxy.get_or_create(_defaults: Optional[Dict[str, Any]] = None, **kwargs) विधि \ * QuerysetProxy.update_or_create(**kwargs) विधि

बनाएँ

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

नमूना उदाहरण बनाएं, इसे डेटाबेस में सहेजें, और नमूना को अपडेट करने के लिए वापस जाएं (pk आबादी है यदि पारित नहीं किया गया है और ऑटो-वेतन वृद्धि सेट है)।

अनुमत kwarफ़ील्ड नाम और सही मान प्रकारों नमूना हैं।

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
कक्षा अल्बूm (ormar. Model):
    ormar_config = ormar। marConfig (
        डेटाबेस = डेटाबेस,
        मेटाडेटा = मेटाडेटा,
        टेबलनाम = "एल्बम"
    )


    आईडी: int = ormar। पूर्णांक (primary_key = True)
    नाम: str = ormar। स्ट्रिंग (max_length = 100)


मालिबू = एल्बम का इंतजार करें (name = "Malibu")
ATrack.objects.create (एल्बम = मालिबू, शीर्षक = "द बर्ड", स्थिति = 1)

एक अन्य दृष्टिकोण नमूना निर्माण और दृढ़ता है।

1
2
मालिबू = अल्बूm (name = "Malibu")
प्रतीक्षा malibu.save ()

!!!टिप नमूना नमूना में अन्य तरीकों की जाँच करें

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

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

विधियों का एक संयोजन बनाएं और प्राप्त करें।

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

_defaults शब्दकोश प्रदान करते समय, _defaults में सेट किए गए मान हमेशा सेट किए जाएंगे, जिसमें स्पष्ट रूप से प्रदान किए गए ओवरराइड करना शामिल है।get_or_create(_defaults: {"title": "I win"}, title="never used") हमेशा शीर्षक के रूप में "मैं जीता" का उपयोग करेगा चाहे आप kwarमें अपना स्वयं का मूल्य प्रदान करें या नहीं।

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
कक्षा अल्बूm (ormar. Model):
    ormar_config = ormar। marConfig (
        डेटाबेस = डेटाबेस,
        मेटाडेटा = मेटाडेटा,
        टेबलनाम = "एल्बम"
    )

    आईडी: int = ormar। पूर्णांक (primary_key = True)
    नाम: str = ormar। स्ट्रिंग (max_length = 100)
    वर्ष: int = ormar। पूर्णांक ()


एल्बम, बनाया = एल्बम। objects.get_or_create (नाम = 'द कैट', _defaults ={"year": 1999})
बनाया गया आरोप सत्य है
album.name = = "द कैट"
सम्मिलित एल्बम। वर्ष == 1999
#object बनाया गया है क्योंकि यह मौजूद नहीं है
एल्बम 2, बनाया = एल्बम का इंतजार करें। objects.get_or_create (name = 'The Cat')
बनाया गया आरोप गलत है
एल्बम = = एल्बम 2
# वापसी सच है क्योंकि एक ही db पंक्ति वापस आ गई है

!!!चेतावनी, डेटाबेस में बराबर पंक्तियाँ होने के बावजूद, ऊपर दिए गए उदाहरण में एल्बम और एल्बम 2 2 अलग-अलग पायथन ऑब्जेक्ट हैं! उनमें से एक को अपडेट करने से दूसरा ताज़ा नहीं होगा जब तक कि आप डेटाबेस से स्पष्ट रूप से () नया डेटा लोड नहीं करते।

ध्यान दें कि यदि आप एक नई वस्तु बनाना चाहते हैं, तो आपको या तो pk कॉलम मान पास करना होगा, या pk कॉलम को ऑटो-इन्क्रीमेंट पर सेट किया जाना चाहिए

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

update_or_create(**kwargs) -> Model

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

 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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import asyncio

import databases
import ormar
import sqlalchemy
from examples import create_drop_database

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

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


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

    id: int = ormar.Integer(primary_key=True)
    title: str = ormar.String(max_length=200)
    author: str = ormar.String(max_length=100)
    genre: str = ormar.String(
        max_length=100,
        default="Fiction",
    )


@create_drop_database(base_config=ormar_base_config)
async def run_query():
    await Book.objects.create(
        title="Tom Sawyer", author="Twain, Mark", genre="Adventure"
    )
    await Book.objects.create(
        title="War and Peace", author="Tolstoy, Leo", genre="Fiction"
    )
    await Book.objects.create(
        title="Anna Karenina", author="Tolstoy, Leo", genre="Fiction"
    )

    # if not exist the instance will be persisted in db
    vol2 = await Book.objects.update_or_create(
        title="Volume II", author="Anonymous", genre="Fiction"
    )
    assert await Book.objects.count() == 4

    # if pk or pkname passed in kwargs (like id here) the object will be updated
    assert await Book.objects.update_or_create(id=vol2.id, genre="Historic")
    assert await Book.objects.count() == 4


asyncio.run(run_query())

ध्यान दें कि यदि आप एक नई वस्तु बनाना चाहते हैं, तो आपको या तो pk कॉलम मान पास करना होगा, या pk कॉलम को ऑटो-इन्क्रीमेंट पर सेट किया जाना चाहिए

बैच निर्माण

bulk_create(objects: List["Model"]) -> None

आपको एक साथ कई ऑब्जेक्ट बनाने की अनुमति देता है।

आपको नमूना वस्तुओं की एक मान्य सूची पास करने की आवश्यकता है।

 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
33
34
35
36
37
38
39
import asyncio

import databases
import ormar
import sqlalchemy
from examples import create_drop_database

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

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


class ToDo(ormar.Model):
    ormar_config = ormar_base_config.copy(tablename="todos")

    id: int = ormar.Integer(primary_key=True)
    text: str = ormar.String(max_length=500)
    completed = ormar.Boolean(default=False)


@create_drop_database(base_config=ormar_base_config)
async def run_query():
    # create multiple instances at once with bulk_create
    await ToDo.objects.bulk_create(
        [
            ToDo(text="Buy the groceries."),
            ToDo(text="Call Mum.", completed=True),
            ToDo(text="Send invoices.", completed=True),
        ]
    )

    todoes = await ToDo.objects.all()
    assert len(todoes) == 3


asyncio.run(run_query())

नमूना विधि

प्रत्येक नमूना उदाहरण में स्वयं को सहेजने, अपडेट करने या लोड करने के तरीकों का एक सेट होता है।

बचाओ

आप Query.() विधि का उपयोग कर सकते हैं या नमूना को एक सामान्य dके रूप में आरंभ कर सकते नमूना और फिर एक नया नमूना बनाने के लिए () विधि को कॉल कर सकते हैं।

!!!टिप मॉडल-सेव में सेव () विधि के बारे में अधिक पढ़ें

अपडेट डालें

यह नमूना के सहेजें () या अद्यतन (**kwargs) विधियों के लिए एक प्रॉक्सी है। यदि pk सेट नहीं है, तो सहेजें () विधि को बुलाया जाएगा।

!!!टिप मॉडल-अपसर्ट में upsert () विधि के बारे में अधिक पढ़ें

संबंधित सहेजें

विधि नमूना के सभी संबंधों पर पुनरावृत्ति करती है जिसे विधि कहा जाता है और प्रत्येक असहेजे गए नमूना पर upsert () विधि को कॉल करता है।

!!!टिप मॉडल-सेव-लेटेड में सेव \ _ लेटेड () विधि के बारे में अधिक पढ़ें

QueryProविधि

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

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

बनाएँ

निर्माण फ़ंक्शन ऊपर दिए गए एक के समान है, लेकिन आपको रिश्ते के दूसरे छोर से संबंधित वस्तुओं को बनाने की अनुमति देता है।

!!!QueryProके बारे में अधिक जानने के लिए, QueryProअनुभाग पर जाएं

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

वास्तव में ऊपर दिए गए फ़ंक्शन के समान है, लेकिन आपको संबंध के दूसरे छोर से संबंधित ऑब्जेक्ट्स को क्वेरी करने या बनाने की अनुमति देता है।

!!!QueryProके बारे में अधिक जानने के लिए, QueryProअनुभाग पर जाएं

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

अपडेट \ _ या \ _ फ़ंक्शन बिल्कुल ऊपर के समान है, लेकिन आपको रिश्ते के दूसरे छोर से संबंधित ऑब्जेक्ट अपडेट करने या बनाने की अनुमति देता है।

!!!QueryProके बारे में अधिक जानने के लिए, QueryProअनुभाग पर जाएं