विषय पर बढ़ें

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

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

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

  • update_or_create(**kwargs) -> Model

  • bulk_update(objects: List[Model], columns: List[str] = None) -> None

  • नमूना

    • मॉडल.अपडेट () विधि
    • मॉडल.upsert () विधि
    • Model.save \ _ lated () विधि
    • क्वेरी सेट एजेंट

    • QuerysetProxy.update_or_create(**kwargs) विधि

अद्यतन

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

Queryस्तर अपडेट का उपयोग एक ही बार में एक ही मान के साथ कई रिकॉर्ड अपडेट करने के लिए किया जाता है।

आपको या तो पहले Queryफ़िल्टर करना होगा या पूरी तालिका को अपडेट करने के लिए प्रत्येक = ट्रू फ्लैग प्रदान करना होगा।

यदि आप यह ध्वज या फ़िल्टर प्रदान नहीं करते हैं, तो QueryDefinitionError उठाया जाता है।

पंक्तियों की अद्यतन संख्या लौटाता है।

 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
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(
        tablename="books",
    )

    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"
    )

    await Book.objects.update(each=True, genre="Fiction")
    all_books = await Book.objects.filter(genre="Fiction").all()
    assert len(all_books) == 3


asyncio.run(run_query())

!!!चेतावनी, आकस्मिक ओवरराइटिंग को रोकने के लिए अपडेट करने से पहले क्वेरी सेट को फ़िल्टर करने की आवश्यकता है।

1
पूरे डेटाबेस तालिकाओं को अपडेट करने के लिए `each=True` सुरक्षा स्विच के रूप में प्रदान करने की आवश्यकता है

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

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_update(objects: List["Model"], columns: List[str] = None) -> None

कई उदाहरणों को एक साथ अपडेट करने की अनुमति देता है।

सभी पारित मॉडल को प्राथमिक कुंजी स्तंभों के साथ आबाद करने की आवश्यकता है।

आप स्ट्रिंग नामों की सूची के रूप में कॉलम सूची पास करके अपडेट करने के लिए फ़ील्ड का चयन भी कर सकते हैं।

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# बल्क_क्रिएट से उदाहरण जारी रखना
# अद्यतन वस्तुओं
टोडो में टोडो के लिए:
    Todo.= गलत

# एक बार में सभी वस्तुओं के अपडेट
# ऑब्जेक्ट्स में pk कॉलम सेट होना चाहिए, अन्यथा अपवाद उठाया जाता है
ToDo.objects.block_update (todos) का इंतजार करें

पूरा हुआ = ToDo.का इंतजार करें (completed = False).सभी ()
लेन डालें (पूरा) == 3

नमूना विधि

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

अद्यतन

आप किसी नमूना को उसके गुणों (fields) को अपडेट करके और अपडेट () विधि को कॉल करके अपडेट कर सकते हैं।

यदि आप प्राथमिक कुंजी सेट किए बिना नमूना अपडेट करने का प्रयास करते हैं, ModelPersistenceError अपवाद फेंक दिया जाता है।

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

अपडेट डालें

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

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

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

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

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

QueryProविधि

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

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

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

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

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