---
title: "Ionstraimíocht bunachar sonraí"
version: 5.2
locale: ga
source: https://docs.djangoproject.com/ga/5.2/topics/db/instrumentation/
canonical: https://djangodocs.dev/ga/5.2/topics/db/instrumentation/
---
# Ionstraimíocht bunachar sonraí

Chun cabhrú leat na ceisteanna a eisíonn do chód a thuiscint agus a rialú, soláthraíonn Django crúca chun feidhmeanna fillte a shuiteáil timpeall ar fhiosruithe bunachar sonraí a fhorghní Mar shampla, is féidir le fillteoirí ceisteanna a chomhaireamh, fad na fiosrúcháin a thomhas, ceisteanna logála, nó fiú cosc a chur ar fhorghníomhú ceisteanna (m.sh. chun a chinntiú nach n-eisítear aon cheisteanna agus teimpléad á rindreáil le sonraí réamhf

Déantar na fillteáin a mhúnlú tar éis: doc: middleware \- is glaonna iad a ghlac\</topics/http/middleware\> ann glaoch eile mar cheann dá n-argóintí. Glaonn siad ar an glaoch sin chun an cheist bunachar sonraí (fillte b'fhéidir) a ghairm, agus is féidir leo an méid a theastaíonn uathu a dhéanamh timpeall an ghlao sin. Cruthaítear agus suiteáiltear iad, áfach, le cód úsáideora, agus mar sin ní theastaíonn monarcha ar leithligh uathu mar a dhéanann middleware.

Déantar fillteán a shuiteáil i mbainisteoir comhthéacs - mar sin tá na fillteáin sealadach agus go sonrach le sreabhadh éigin i do chód.

Mar a luadh thuas, is sampla de fhillteán ná blocaire forghníomhaithe fiosrúcháin. D'fhéadfadh cuma seo a bheith air:

```
def blocker(*args):
    raise Exception("No database access allowed here.")
```

Agus úsáidfí é d'fhonn ceisteanna ón teimpléad a bhac mar sin:

```
from django.db import connection
from django.shortcuts import render

def my_view(request):
    context = {...}  # Code to generate context with all data.
    template_name = ...
    with connection.execute_wrapper(blocker):
        return render(request, template_name, context)
```

Is iad na paraiméadair a sheoltar chuig na fillteáin ná:

- fhorghníomhach\` - glaoch, ar chóir a ghairm leis an gcuid eile de na paraiméadair d'fhonn an cheist a fhorghníomhú.
- `sql` \- str\`, an ceist SQL atá le seoladh chuig an mbunachar sonraí.
- `params` \- liosta/tiúpla de luachanna paraiméadar don ordú SQL, nó liosta/tiúpla de liosta/tuples más é executemany () an glao fillte.
- ``` `many ``- `bool ``` a thugann le fios an bhfuil executar ()\` nó executemany () \`\`an glao a ghairmtear sa deireadh ()\` (agus cibé an bhfuiltear ag súil go mbeidh params\` ina seicheamh luachanna, nó seicheamh seicheamh luachanna).
- `context` -- foclóir le sonraí breise faoi chomhthéacs an t-ionghairm. Áirítear leis seo an nasc agus an cúrsóir.

Ag baint úsáide as na paraiméadair, d'fhéadfadh leagan beagán níos casta den bhlocóir ainm an nasc sa teachtaireacht earráide a áireamh:

```
def blocker(execute, sql, params, many, context):
    alias = context["connection"].alias
    raise Exception("Access to database '{}' blocked here".format(alias))
```

Le haghaidh sampla níos iomláine, d'fhéadfadh cuma seo a bheith ar logálaí ceisteanna:

```
import time

class QueryLogger:
    def __init__(self):
        self.queries = []

    def __call__(self, execute, sql, params, many, context):
        current_query = {"sql": sql, "params": params, "many": many}
        start = time.monotonic()
        try:
            result = execute(sql, params, many, context)
        except Exception as e:
            current_query["status"] = "error"
            current_query["exception"] = e
            raise
        else:
            current_query["status"] = "ok"
            return result
        finally:
            duration = time.monotonic() - start
            current_query["duration"] = duration
            self.queries.append(current_query)
```

Chun é seo a úsáid, chruthófá réad logger agus é a shuiteáil mar fhilleadh:

```
from django.db import connection

ql = QueryLogger()
with connection.execute_wrapper(ql):
    do_queries()
# Now we can print the log.
print(ql.queries)
```

## nascach.execute\_wrapper () \`\`

#### `execute_wrapper(wrapper)`

Filleann bainisteoir comhthéacs ar ais a shuiteálann, nuair a chuirtear isteach é, timpeall forghníomhaithe fiosrúcháin bunachar sonraí, agus nuair a bhíonn sé amach, baineann sé an fillteán Tá an fillteán suiteáilte ar an réad nasc snáithe áitiúil.

Is é `wrapper` is féidir glaoch a ghlacadh cúig argóint. Iarrtar ar gach forghníomhú ceisteanna i raon feidhme an bhainisteora comhthéacs, le hargóintí ```forghníomhaítear ``, `sql```, params\`, `go leor`, agus `context` mar a thuairiscítear thuas. Táthar ag súil go gcuirfidh sé glaoch ar executar (sql, params, go leor, comhthéacs) agus luach tuairisceáin an ghlao sin a thabhairt ar ais.
