विषय पर बढ़ें

लेन-देन

अतुल्यकालिक प्रश्नों को जारी करने के लिए उपयोग किए जाने वाले एन्कोडिंग / डेटाबेस के कारण डेटाबेस लेनदेन समर्थित हैं।

मूल उपयोग

लेनदेन का उपयोग करने के लिए, अतुल्यकालिक संदर्भ प्रबंधक के रूप में asका उपयोग करें:

1
2
3
4
5
डेटाबेस लेनदेन () के साथ एसिंक:
    # यहां बुलाया गया सब कुछ एक लेनदेन होगा
    प्रतीक्षा मॉडल 1 ().save ()
    प्रतीक्षा मॉडल 2 ().save ()
    ...

!!!ध्यान दें कि यह नमूना के ormar \ _ config ऑब्जेक्ट में उपयोग किया जाने वाला समान डेटाबेस होना चाहिए।

अपने कोड में डेटाबेस इंस्टेंसेस पास करने से बचने के लिए, आप प्रत्येक नमूना से इंस्टेंसेस निकाल सकते हैं। ormar के दौरान प्रदान किए गए डेटाबेस। मॉडल घोषणा ormar \ _ config के माध्यम से उपलब्ध है और इसे कक्षाओं और इंस्टेंसेस से एक्सेस किया जा सकता है।

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
आयात डेटाबेस
आयात sqlalchआयात करें
आयात करें


आधार _ ormar _ config = marConfig (
    मेटाडेटा = वर्गधर्मी। मेटाडेटा (),
    डेटाबेस = डेटाबेस। डेटाबेस ("sqlite :///"),
)


कक्षा लेखक (ormar. Model):
    ormar _ config = आधार _ ormar _ config कॉपी ()

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

# डेटाबेस कक्षा से सुलभ है
डेटाबेस = लेखक ormar _ config डेटाबेस

# साथ ही उदाहरण से
लेखक = लेखक (नाम = "स्टीफन किंग")
डेटाबेस = लेखक .ormar_config

आप किसी भी अतुल्यकालिक फ़ंक्शन के लिए फ़ंक्शन डेकोरेटर के रूप में .() का भी उपयोग कर सकते हैं:

1
2
3
@ डेटाबेस.ट्रांजेक्शन ()
Ac def create_users (request):
    ...

लेन-देन ब्लॉक को कार्य-स्थानीय स्थिति के रूप में प्रबंधित किया जाता है। नेस्टेड लेनदेन डेटाबेस सेवपॉइंट का उपयोग करके पूरी तरह से समर्थित और कार्यान्वित किए जाते हैं।

मैनुअल कमिट / रोलबैक

निचले स्तर के ट्रेडिंग एपीआई के लिए, आप इसे मैन्युअल रूप से ट्रिगर कर सकते हैं

1
2
3
4
5
6
7
8
लेन-देन = डेटाबेस का इंतजार करें ()
कोशिश:
    लेन-देन का इंतजार है। ()
    ...
सिवाय:
    लेन-देन की प्रतीक्षा कर रहा है। ()
अन्य:
    लेन-देन का इंतजार है। ()

परीक्षण

परीक्षण के दौरान लेनदेन भी उपयोगी होते हैं जब आप मजबूर रोलबैक लागू कर सकते हैं और प्रत्येक परीक्षण के बाद डेटा को साफ करने की आवश्यकता नहीं होती है।

1
2
3
4
5
6
@ Pytest.mark.asyncio
Ac def नमूना_टेस्ट ():
    डेटाबेस के साथ एसिंक:
        asके साथ एसिंक (force_rollback = True):
            # आपका परीक्षण कोड यहाँ
            ...