---
title: "Bunachair sonraí"
version: 5.2
locale: ga
source: https://docs.djangoproject.com/ga/5.2/ref/databases/
canonical: https://djangodocs.dev/ga/5.2/ref/databases/
---
# Bunachair sonraí

Tacaíonn Django go hoifigiúil leis na bunachair sonraí seo

- \<postgresql-notes\>:ref: PostgreSQL \`
- \<mariadb-notes\>:ref: MariaDB \`
- \<mysql-notes\>:ref: MySQL \`
- \<oracle-notes\>:ref: Oracle \`
- \<sqlite-notes\>:tagairt: SQLite \`

\<third-party-notes\>Tá roinnt cúltaca bunachar sonraí ann freisin: ref: a sholáthraíonn tríú páirtithe .

Déanann Django iarracht tacú leis an oiread gnéithe agus is féidir ar gach cúltaca bunachar sonraí. Mar sin féin, níl gach cúltaca bunachar sonraí mar an gcéanna, agus bhí orainn cinntí dearaidh a dhéanamh faoi na gnéithe le tacú le tacú leo agus na toimhdeanna is féidir linn a dhéanamh go sábháilte.

Déanann an comhad seo cur síos ar chuid de na gnéithe a d'fhéadfadh a bheith ábhartha le húsáid Django. Níl sé beartaithe mar athsholáthar do dhoiciméadú nó lámhleabhair tagartha atá sonrach le freastalaí.

## Nótaí ginearálta

### Naisc leanúnacha

Seachnaíonn naisc leanúnacha an lasbhaird a bhaineann le nasc leis an mbunachar sonraí a athbhunú i ngach iarratas HTTP. Tá siad á rialú ag an bparaiméadar: setting: CONN\_MAX\_AGE a shainmhíníonn saolré uasta nasc. Is féidir é a shocrú go neamhspleách do gach bunachar sonraí.

Is é “0” an luach réamhshocraithe, ag caomhnú an t-iompar stairiúil a bhaineann le nasc an bhunachar sonraí a dhúnadh ag deireadh gach iarratais. Chun naisc leanúnacha a chumasú, socraí:setting: CONN\_MAX\_AGE go sláimhir dearfach soicind. Maidir le naisc leanúnacha neamhtheoranta, socraigh é go None .

When using ASGI, persistent connections should be disabled. Instead, use your
database backend's built-in connection pooling if available, or investigate a
third-party connection pooling option if required.

#### Bainistíocht nasc

Osclaíonn Django nasc leis an mbunachar sonraí nuair a dhéanann sé ceist bunachar sonraí ar dtús. Coinníonn sé an nasc seo oscailte agus athúsáideann sé é in iarratais ina dhiaidh sin. Dúnann Django an nasc nuair a sháraíonn sé an t-aois uasta atá sainmhínithe ag: setting: CONN\_MAX\_AGE nó nuair nach bhfuil sé inúsáidte a thuilleadh.

Go mion, osclaíonn Django nasc leis an mbunachar sonraí go huathoibríoch aon uair a theastaíonn ceann uaidh agus níl ceann aige cheana féin - toisc gurb é seo an chéad nasc, nó toisc go raibh an nasc roimhe seo dúnta.

Ag tús gach iarratais, dúnann Django an nasc má tá a uasaois bainte amach aige. Má chuireann do bhunachar sonraí deireadh le naisc díomhaoin tar éis roinnt ama, ba chóir duit:setting: CONN\_MAX\_AGE a shocrú go luach níos ísle, ionas nach ndéanfaidh Django iarracht nasc a chuir deireadh leis an bhfreastalaí bunachar sonraí a úsáid. (Ní fhéadfaidh an fhadhb seo dul i bhfeidhm ach ar shuíomhanna tráchta an-íseal.)

Ag deireadh gach iarratais, dúnann Django an nasc má tá a uasaois bainte amach aige nó má tá sé i stát earráide neamh-inaisghabháilte. Má tharla aon earráidí bunachar sonraí agus na hiarrataí á bpróiseáil, seiceálann Django an n-oibríonn an nasc fós, agus dúnann sé mura ndéanann sé. Mar sin, bíonn tionchar ag earráidí bunachar sonraí ar iarratas amháin ar a mhéad in aghaidh an snáithe oibrí gach iarratais; má éiríonn an nasc neamhúsáidte, faigheann an chéad iarratas eile nasc úr

Socraithe:Socrú: Is féidir CONN\_HEALTH\_CHECKS go `True` a úsáid chun láidneacht athúsáide nasc a fheabhsú agus earráidí a chosc nuair a dhúntar nasc ag an bhfreastalaí bunachar sonraí atá réidh anois chun nasc nua a ghlacadh agus a sheirbheáil, m.sh. tar éis freastalaí bunachar sonraí a atosú. Ní dhéantar an seiceáil sláinte ach uair amháin in aghaidh an iarratais agus ach amháin má tá rochtain ar an mbunachar sonraí le linn láimhseáil an iarratais.

#### Rabhadh

Ós rud é go gcoinníonn gach snáithe a nasc féin, caithfidh do bhunachar sonraí tacú leis an oiread naisc chomhuaineach ar a laghad agus atá snáitheanna oi

Uaireanta ní bhfaighidh tromlach do thuairimí rochtain ar bhunachar sonraí, mar shampla toisc gurb é bunachar sonraí córas seachtrach é, nó a bhuíochas le caching. I gcásanna den sórt sin, ba chóir duit:socrú: CONN\_MAX\_AGE go luach íseal nó fiú 0\`, toisc nach bhfuil ciall aige nasc a choinneáil nach dócha go n-athúsáidfear. Cuideoidh sé seo líon na naisc chomhuaineach leis an mbunachar sonraí seo a choinneáil beag.

Cruthaíonn an freastalaí forbartha snáithe nua do gach iarratas a láimhseálann sé, ag diúltú ar éifeacht naisc leanúnacha. Ná cuir ar chumas iad le linn na forbartha.

Nuair a bhunaíonn Django nasc leis an mbunachar sonraí, bunaíonn sé paraiméadair iomchuí, ag brath ar an gcúltaca atá á úsáid. Má chumasaíonn tú naisc leanúnacha, ní dhéantar an socrú seo a athdhéanamh gach iarratas a thuilleadh. Má mhodhníonn tú paraiméadair mar leibhéal aonrú nó crios ama an nasc, ba cheart duit réamhshocruithe Django a athbhunú ag deireadh gach iarratais, luach cuí a chur i bhfeidhm ag tús gach iarratais, nó naisc leanúnacha a dhíchumasú.

Má chruthaítear nasc i bpróiseas fadtéarmach, lasmuigh de thimthriall iarrata-freagartha Django, fanfaidh an nasc oscailte go dtí go ndúnfar go sainráite, nó go dtarlóidh an t-am. Is féidir leat django.db.close\_old\_connexions () a úsáid chun gach sean-nasc nó neamhúsáidte a dhúnadh.

### Ionchódú

Glacann Django leis go n-úsáideann gach bunachar sonraí ionchódú UTF-8. D'fhéadfadh iompar gan choinne mar earráidí “luach rófhada” ó do bhunachar sonraí a bheith mar thoradh ar ionchódú eile a úsáid le haghaidh sonraí atá bailí i Django. Féach na nótaí sonracha bunachar sonraí thíos chun faisnéis a fháil ar conas do bhunachar sonraí a chur ar bun i gceart

## Nótaí PostgreSQL

Django supports PostgreSQL 14 and higher. [psycopg](https://www.psycopg.org/psycopg3/) 3.1.8+ or [psycopg2](https://www.psycopg.org/)
2.8.4+ is required, though the latest [psycopg](https://www.psycopg.org/psycopg3/) 3.1.8+ is recommended.

> **Note**
>
> Is dóigh go ndéanfar tacaíocht do psycopg2 a dhíchur agus a bhaint ag pointe éigin sa todhchaí.

### Socruithe nasc PostgreSQL

Féach: socrú: HOST le haghaidh sonraí.

Chun ceangal ag baint úsáide as ainm seirbhíse ón [comhad seirbhíse nasc](https://www.postgresql.org/docs/current/libpq-pgservice.html) agus pasfhocal ón [comhad pasfhocal](https://www.postgresql.org/docs/current/libpq-pgpass.html), ní mór duit iad a shonrú sa chuid:setting: OPTIONS de do chumraíocht bunachar sonraí in:setting: DATABASES:

*`settings.py`*

```python
DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql",
        "OPTIONS": {
            "service": "my_service",
            "passfile": ".my_pgpass",
        },
    }
}
```

*`.pg_service.conf`*

```text
[my_service]
host=localhost
user=USER
dbname=NAME
port=5432
```

*`.my_pgpass`*

```text
localhost:5432:NAME:USER:PASSWORD
```

Cuireann cúltaca PostgreSQL ábhar de:setting: OPTIONS mar argóintí eochairfhocal chuig an tógálaí nasc, rud a ligeann rialú níos airde ar iompar tiománaí. Déantar cur síos mion ar na paraiméadair go léir atá ar fáil i ndoiciméadú PostgreSQL.

> **Warning**
>
> Ní thacaítear le húsáid ainm seirbhíse chun críocha tástála. \<33685\>Seo:ticéad: féadfar a chur i bhfeidhm níos déanaí .

### Cumraíocht PostgreSQL a bharrfheabhsú

Teastaíonn Django na paraiméadair seo a leanas dá naisc bunachar sonraí:

- `client_encoding`: `` `UTF8' ``,
- `default_transaction_isolation`: `'read committed'` de réir réamhshocraithe, nó an luach atá leagtha síos sna roghanna nasc (féach thíos),
- **crios ama :**

    - \<DATABASE-TIME\_ZONE\>nuai:setting: is é USE\_TZ `True`, `UTC'` de réir réamhshocraithe, nó an:setting: TIME\_ZON luach socraithe don nasc,
    - nuai:setting: USE\_TZ `False`, luach an socrú domhanna:setting: TIME\_ZONE.

Má tá na luachanna cearta ag na paraiméadair seo cheana féin, ní shocróidh Django iad do gach nasc nua, rud a fheabhsaíonn feidhmíocht beagán. Is féidir leat iad a chumrú go díreach in:file: postgresql.conf nó níos áisiúla in aghaidh an úsáideora bunachar sonraí le [ALTER ROLE](https://www.postgresql.org/docs/current/sql-alterrole.html).

Oibreoidh Django go breá gan an barrfheabhsú seo, ach déanfaidh gach nasc nua roinnt ceisteanna breise chun na paraiméadair seo a shocrú.

### Leibhéal aonrú

Cosúil le PostgreSQL féin, déanann Django réamhshocrú ar an leibhéal aonair ```READ COMMITTED`_. Má theastaíonn leibhéal aonrúcháin níos airde uait mar ``REPEATABLE READ ``nó `SERIALIZABLE```, socraigh é sa chuid:SETTING: OPTIONS de chumraíocht do bhunachar sonraí in:setting: DATABASES:

```
from django.db.backends.postgresql.psycopg_any import IsolationLevel

DATABASES = {
    # ...
    "OPTIONS": {
        "isolation_level": IsolationLevel.SERIALIZABLE,
    },
}
```

> **Note**
>
> Faoi leibhéil aonrú níos airde, ba cheart d'iarratas a bheith ullmhaithe chun eisceachtaí a ardaítear ar theipeanna sraitheach Tá an rogha seo deartha le haghaidh ardúsáidí.

### Ról

If you need to use a different role for database connections than the role used
to establish the connection, set it in the [`OPTIONS`](/ga/5.2/ref/settings/#std-setting-OPTIONS) part of your
database configuration in [`DATABASES`](/ga/5.2/ref/settings/#std-setting-DATABASES):

```
DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql",
        # ...
        "OPTIONS": {
            "assume_role": "my_application_role",
        },
    },
}
```

### Linn snámha nasc

> **New in Django 5.1**

Chun linn nasc le [psycopg](https://www.psycopg.org/psycopg3/) a úsáid, is féidir leat `"pool"` a shocrú sa chuid:setting: OPTIONS de do chumraíocht bunachar sonraí in:setting: DATABASES chun a bheith ina dict le rith chuig:class: ~psycopg:psycopg\_pool.connectionpool, nó go `True` chun an Connectionpool\` def\` a úsáid buntáistí:

```
DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql",
        # ...
        "OPTIONS": {
            "pool": True,
        },
    },
}
```

Éilíonn an rogha seo ```psycopg [pool] ``nó:pypi: `psycopg-pool` a shuiteáil agus neamhaird a dhéanamh air le `psycopg2```.

### Paraiméadair taobh an fhreastalaí

\<psycopg:client-side-binding-cursors\>Le [psycopg](https://www.psycopg.org/psycopg3/) 3.1.8+, déanann Django réamhshocraithe ar na: ref: cúrsaí ceangailte taobh an chliaint \`. Más mian leat an: ref: \`ceangailt taobh freastala \<psycopg:server-side-binding\>í \`a úsáid, socraigh é sa chuid:setting: \`OPTIONS de do chumraíocht bunachar sonraí in:setting: DATABASES:

```
DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql",
        # ...
        "OPTIONS": {
            "server_side_binding": True,
        },
    },
}
```

Déantar neamhaird ar an rogha seo le psycopg2\`.

### Innéacsanna do cholúin `varchar` agus `text`

Nuair a shonraítear DB\_index = True\` ar do réimsí samhail, is gnách go n-aschuireann Django ráiteas `CREATE INDEX` amháin. Mar sin féin, más é varchar\` nó text\` an cineál bunachar sonraí don réimse (m.sh., úsáideann `Charfield`, Filefield\`, agus `Textfield`), ansin cruthóidh Django innéacs breise a úsáideann rang oibreora PostgreSQL cuí \`\_ don cholún. Tá an t-innéacs breise riachtanach chun cuardaigh a dhéanamh i gceart a úsáideann an oibreoir \`\`LIKE\` ina SQL, mar a dhéantar leis na cineálacha cuardaigh `contains` agus startswith\`.

### Oibríocht imirce chun síntí a chur

Más gá duit síneadh PostgreSQL a chur leis (cosúil le `hstore`, postgis\`, srl.) ag baint úsáide as imirce, bain úsáid as an oibríocht: :class: ~django.contrib.postgres.operations.createExtension.

### Cúrsaí taobh an fhreastalaí

\<django.db.models.query.QuerySet.iterator\>\<psycopg:server-side-cursors\>Nuair a úsáidtear: meth: QuerySet.iterator () \`, osclaíonn Django a:ref: \`cúrsóir taobh freastalaí. De réir réamhshocraithe, glacann PostgreSQL leis nach bhfaighfear ach an chéad 10% de thorthaí na gceisteanna cúrsóra a fháil. Caitheann an pleanálaí fiosrúcháin níos lú ama a phleanáil an cheist agus tosaíonn sé torthaí a thabhairt ar ais níos gasta, ach d'fhéadfadh sé seo feidhmíocht a laghdú má aisghairtear níos mó ná 10% Rialaítear toimhdí PostgreSQL ar líon na sraitheanna a aisghabháiltear le haghaidh ceist cúrsóra leis an rogha [cursor\_tuple\_fraction](https://www.postgresql.org/docs/current/runtime-config-query.html#GUC-CURSOR-TUPLE-FRACTION).

#### Comhdhlúthú idirbheart agus cúrsaí taobh an fhreastalaí

Teastaíonn cúrsóirí taobh an fhreastalaí a dhíchumasú don nasc sin a úsáid i mód comhiontála idirbheart (m.sh. [PGBouncer](https://www.pgbouncer.org/)).

\<DATABASE-AUTOCOMMIT\>Tá cúrsóirí taobh an fhreastalaí áitiúil le nasc agus fanann siad oscailte ag deireadh idirbheart nuai:socrú: AUTOCOMMIT `True`. Féadfaidh idirbheart ina dhiaidh sin iarracht a dhéanamh níos mó torthaí a fháil ó chúrsóir taobh an fhreastalaí. I mód comhiontála idirbheart, níl aon ráthaíocht ann go n-úsáidfidh idirbhearta ina dhiaidh sin an nasc céanna. Má úsáidtear nasc difriúil, ardaítear earráid nuair a thagraíonn an t-idirbheart don chúrsóir taobh an fhreastalaí, toisc nach bhfuil cúrsóirí taobh an fhreastalaí inrochtana ach sa nasc inar cruthaíodh iad.

\<DATABASE-DISABLE\_SERVER\_SIDE\_CURSORS\>Réiteach amháin is ea cursóirí taobh an fhreastalaí a dhíchumasú le haghaidh nasc in:setting: DATABASES trí shocrú: socrú: DISABLE\_SERVER\_SIDE\_CURSORS \`go \`\`True\`.

Chun leas a bhaint as cúrsóirí taobh an fhreastalaí i mód comhiomlánaithe idirbheart, d'fhéadfá: doc: nasc eile leis an mbunachar sonraithe' a chur ar bun d'fhonn ceisteanna a dhéanamh a úsáideann cúrsaí taobh an fhreastala\</topics/db/multi-db\> í. Caithfidh an nasc seo a bheith go díreach chuig an mbunachar sonraí nó le seoltóir nasc i mód comhiomlánaithe seisiúin.

Rogha eile is ea gach `QuerySet` a fhilleadh ag baint úsáide as cúrsaí taobh an fhreastalaí i mbloc:func: ~django.db.transaction.atomic, toisc go ndéanann sé autocommit a dhíchumasú ar feadh ré an idirbheart. Ar an mbealach seo, ní bheidh an cúrsóir taobh an fhreastalaí beo ach ar feadh tréimhse an idirbheart.

### Luachanna na n-eochracha bunscoile atá ag méadú uathoibríoch

Úsáideann Django colúin aitheantais PostgreSQL chun eochracha bunmhéadaithe uathoibríoch a stóráil. Tá luachanna ó [seicheamh](https://www.postgresql.org/docs/current/sql-createsequence.html) i gcolún aitheantais a choinníonn súil ar an gcéad luach eile atá ar fáil. Ní dhéanann luach a shannadh de láimh do réimse uathoibríoch a nuashonrú seicheamh an réimse, rud a d'fhéadfadh coinbhleacht a bheith ina chúis níos déanaí. Mar shampla:

```pycon
>>> from django.contrib.auth.models import User
>>> User.objects.create(username="alice", pk=1)
<User: alice>
>>> # The sequence hasn't been updated; its next value is 1.
>>> User.objects.create(username="bob")
IntegrityError: duplicate key value violates unique constraint
"auth_user_pkey" DETAIL:  Key (id)=(1) already exists.
```

Más gá duit luachanna den sórt sin a shonrú, athshocraigh an seicheamh ina dhiaidh sin chun luach atá sa tábla cheana féin a athúsáid a sheachaint. Gineann an t-ordú bainistíochta: Djadmin: sqlsequencereset na ráitis SQL chun é sin a dhéanamh.

### Teimpléid bhunachar sonraí

Is féidir leat an socrú:setting: [TEST \['\<TEST\_TEMPLATE\>TEMPLATE'\] \`a úsáid chun \`teimpléad](https://www.postgresql.org/docs/current/sql-createdatabase.html) a shonrú (m.sh. 'teimpléad0') uaidh chun bunachar sonraí tástála a chruthú.

### Forghníomhú tástála a bhrostú le socruithe neamh-bhuan

\< <https://www.postgresql.org/docs/current/non-durability.html>\>Is féidir leat amanna forghníomhaithe tástála a bhrostú trí .

> **Warning**
>
> Tá sé seo contúirteach: déanfaidh sé do bhunachar sonraí níos so-ghabháilte do chaillteanas sonraí nó éilliú i gcás timpiste freastalaí nó caillteanas cumhachta. Úsáid é seo ach ar mheaisín forbartha inar féidir leat ábhar iomlán na mbunachar sonraí go léir sa bhraisle a athbhunú go héasca.

## Nótaí MariaDB

Tacaíonn Django le MariaDB 10.5 agus níos airde.

Chun MariaDB a úsáid, bain úsáid as an gcúltaca MySQL, atá roinnte idir an dá cheann. Féach na:ref: Nótaí MySQL \<mysql-notes\>\`le haghaidh tuilleadh sonraí.

## Nótaí MySQL

### Tacaíocht leagan

Tacaíonn Django le MySQL 8.0.11 agus níos airde.

Úsáideann gné ```inspectdb ``Django an bunachar sonraí `information_schema```, ina bhfuil sonraí mionsonraithe ar gach scéim bunachar sonraí.

Tá Django ag súil go dtacóidh an bunachar sonraí le Unicode (ionchódú UTF-8) agus a thosclaíonn sé dó idirbhearta agus sláine tagartha a fhorfheidhmiú. Tá sé tábhachtach a bheith ar an eolas faoin bhfíric nach bhforfheidhmíonn MySQL an dá cheann deireanach i ndáiríre agus an t-inneall stórála MyISAM á úsáid agat, féach an chéad chuid eile.

### Innill stórála

Tá roinnt [inneall stórála](https://dev.mysql.com/doc/refman/en/storage-engines.html) ag MySQL. Is féidir leat an t-inneall stórála réamhshocraithe a athrú i gcumraíocht na freastala

Is é [InnoDB](https://dev.mysql.com/doc/refman/en/innodb-storage-engine.html) inneall stórála réamhshocraithe MySQL. Tá an t-inneall seo idirbheart go hiomlán agus tacaíonn sé le príomhthagairtí eachtracha. Is é an rogha a mholtar é. Mar sin féin, cailltear cuntar autoincrement InnoDB ar atosú MySQL toisc nach gcuimhneann sé an luach AUTO\_INCREMENT\`, ina ionad sin é a athchruthú mar “max (id) +1". D'fhéadfadh luachanna: class: ~Django.db.Models.AutoField athúsáid neamhthuigneach mar thoradh air seo.

Is iad príomh-mhíbhuntáistí [MyISAM](https://dev.mysql.com/doc/refman/en/myisam-storage-engine.html) ná nach dtacaíonn sé le hidirbhearta nó nach bhforfheidhmíonn sé srianta eachtracha eachtrach.

### Tiománaithe API MySQL DB

Tá cúpla tiománaí ag MySQL a chuireann an API Bunachar Sonraí Python i bhfeidhm a thuairiscítear in:pep: 249:

- [mysqlclient](https://pypi.org/project/mysqlclient/) is a native driver. It's **the recommended choice**.
- Is tiománaí íon Python ó Oracle é [MySQL Connector/Python](https://dev.mysql.com/downloads/connector/python/) nach dteastaíonn leabharlann cliant MySQL nó aon mhodúil Python lasmuigh den leabharlann chaighdeánach.

Chomh maith le tiománaí API DB, teastaíonn oiriúnóir ó Django chun rochtain a fháil ar na tiománaithe bunachar sonraí óna ORM. Soláthraíonn Django cuibheoir do mysqlclient agus cuimsíonn MySQL Connector/Python a chuid féin \_.

#### mysqlclient

Éilíonn Django [mysqlclient](#mysqlclient) 1.4.3 nó níos déanaí.

#### Ceanglóir MySQL/Python

Tá MySQL Connector/Python ar fáil ón leathanach [íoslódálaí](https://dev.mysql.com/downloads/connector/python/). Tá an t-oiriúntóir Django ar fáil i leaganacha 1.1.X agus níos déanaí. B'fhéidir nach dtacaíonn sé leis na heisiúintí is déanaí de Django.

### Sainmhínithe crios ama

Má tá sé ar intinn agat Django's:doc: timezone taca a úsáid, bain úsáid as [mysql\_tzinfo\_to\_sql](https://dev.mysql.com/doc/refman/en/mysql-tzinfo-to-sql.html) chun táblaí cri\</topics/i18n/timezones\> os ama a luchtú isteach sa bhunachar sonraí MySQL. Ní mór é seo a dhéanamh uair amháin do do fhreastalaí MySQL, ní in aghaidh an bhunachar sonraí.

### Cruthú do bhunachar sonraí

Is féidir leat [do bhunachar sonraí a chruthai](https://dev.mysql.com/doc/refman/en/create-database.html) ag baint úsáide as na huirlisí líne ordaithe agus an SQL seo:

```sql
CREATE DATABASE <dbname> CHARACTER SET utf8mb4;
```

Cinntíonn sé seo go n-úsáidfidh gach tábla agus colún UTF-8 de réir réamhshocraithe.

#### Socruithe coláireachta

Rialaíonn an socrú comhlánaithe do cholún an t-ord ina ndéantar sonraí a shórtáil chomh maith leis na teaghráin a gcomparáid mar chomhionann. \<django.db.models.CharField.db\_collation\>\<django.db.models.TextField.db\_collation\>Is féidir leat an paraiméadar `db_collation` a shonrú chun ainm comhlánaithe an cholúin a shocrú le haghaidh: attr: CharField \`agus:attr: \`TextField.

Is féidir an bailiú a shocrú freisin ar leibhéal ar fud an mbunachar sonraí agus in aghaidh an tábla. Tá sé seo [doiciméadaithe go críochnú](https://dev.mysql.com/doc/refman/en/charset.html) sa doiciméadú MySQL. I gcásanna den sórt sin, ní mór duit an comhlánú a shocrú trí na socruithe nó na táblaí bunachar sonraí a ionramháil go díreach. Ní sholáthraíonn Django API chun iad a athrú.

By default, with a UTF-8 database, MySQL will use the
`utf8mb4_0900_ai_ci` collation. This results in all string equality
comparisons being done in a *case-insensitive* manner. That is, `"Fred"` and
`"freD"` are considered equal at the database level. If you have a unique
constraint on a field, it would be illegal to try to insert both `"aa"` and
`"AA"` into the same column, since they compare as equal (and, hence,
non-unique) with the default collation. If you want case-sensitive comparisons
on a particular column or table, change the column or table to use the
`utf8mb4_0900_as_cs` collation.

Please note that according to [MySQL Unicode Character Sets](https://dev.mysql.com/doc/refman/en/charset-unicode-sets.html), comparisons for
the `utf8mb4_general_ci` collation are faster, but slightly less correct,
than comparisons for `utf8mb4_unicode_ci`. If this is acceptable for your
application, you should use `utf8mb4_general_ci` because it is faster. If
this is not acceptable (for example, if you require German dictionary order),
use `utf8mb4_unicode_ci` because it is more accurate.

> **Warning**
>
> Bailíonn foirmeacha samhlacha réimsí uathúla ar bhealach cás-íogair. Mar sin nuair a úsáidtear comhdhlúthú cás-neamh-íogair, rachaidh foirm le luachanna réimse uathúla nach bhfuil difriúil ach de réir cháis bailíochtú, ach nuair a ghlaoch ar save () \`, ardófar `IntegrityError`.

### Ceangal leis an mbunachar sonraí

Féach ar an doiciméadú: socruithe doiciméadúsaí \</ref/settings\>.

Úsáidtear socruithe nasc san ord seo:

1. : socrú: ROGHANNAÍ.
2. [`NAME`](/ga/5.2/ref/settings/#std-setting-NAME), [`USER`](/ga/5.2/ref/settings/#std-setting-USER), [`PASSWORD`](/ga/5.2/ref/settings/#std-setting-PASSWORD), [`HOST`](/ga/5.2/ref/settings/#std-setting-HOST),
   [`PORT`](/ga/5.2/ref/settings/#std-setting-PORT)
3. Comhaid rogha MySQL.

Is é sin le rá, má shocraíonn tú ainm an bhunachar sonraí in:setting: OPTIONS, beidh tosaíocht aige seo thair:setting: NAME, a chuirfeadh aon rud i gcomhad rogha [MySQL](https://dev.mysql.com/doc/refman/en/option-files.html) a sháraigh.

Seo cumraíocht shamplach a úsáideann comhad rogha MySQL:

```
# settings.py
DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.mysql",
        "OPTIONS": {
            "read_default_file": "/path/to/my.cnf",
        },
    }
}
```

```ini
# my.cnf
[client]
database = NAME
user = USER
password = PASSWORD
default-character-set = utf8mb4
```

D'fhéadfadh go mbeadh roinnt roghanna ceangail MySQLDB \`\_ eile úsáideach, mar shampla \`\`ssl\`, ```init_command ``, agus ``sql_mode```.

#### Socrú `sql_mode`

Tá `STRICT_TRANS_TABLES` sa luach réamhshocraithe den rogha `sql_mode`. Méadaíonn an rogha sin rabhaidh ina earráidí nuair a ghearrtar sonraí nuair a chuirtear isteach orthu, mar sin molann Django go mór modh dian \`\_ a ghníomhachtú do MySQL chun caillteanas sonraí a chosc (\`STRICT\_TRANS\_TABLES\` nó `STRICT_ALL_TABLES`).

Más gá duit an modh SQL a shaincheapadh, is féidir leat an athróg `sql_mode` a shocrú cosúil le roghanna MySQL eile: i gcomhad cumraithe nó leis an iontráil `'init_command': “SET SQL_MODE='STRICT_TRANS_TABLES'"` san :setting: OPTIONS cuid de do chumraíocht bunachar sonraí in:setting: DATABASES.

#### Leibhéal aonrú

Agus ualaí comharthacha á rith, féadfaidh idirbhearta bunachar sonraí ó sheisiúin éagsúla (abair, snáitheanna ar leithligh a láimhseálann iarrat Bíonn tionchar ag [leibhéal aonrú idirbhearta](https://dev.mysql.com/doc/refman/en/innodb-transaction-isolation-levels.html) gach seisiúin ar na hidirghníomhaíochtaí seo. Is féidir leat leibhéal aonrú nasc a shocrú le iontráil `'isolation_level'` sa chuid:setting: OPTIONS de chumraíocht do bhunachar sonraí in:setting: DATABASES. Is iad na ceithre leibhéal aonrú caighdeánacha luachanna bailí don iontráil seo:

- 'léamh neamhchoitianta \`
- 'choiste léitheach'
- 'inléite athsheolacha'
- ``` ``sraitheach ```

nó `None` chun leibhéal aonrú cumraithe an fhreastalaí a úsáid. Mar sin féin, is fearr a oibríonn Django le léamh tiomanta agus déanann sé réamhshocraithe léamh MySQL seachas léamh réamhshocraithe MySQL. Is féidir caillteanas sonraí a dhéanamh le léamh in-athsheolta. Go háirithe, b'fhéidir go bhfeicfidh tú cásanna ina n-ardóidh: meth: ~django.db.models.query.queryset.get\_or\_create an:exc: ~django.db.IntegrityError ach ní bheidh an réad le feiceáil i nglaoch ina dhiaidh sin: ~django.db.models.queryset.get.

### Do tháblaí a chruthú

Nuair a ghineann Django an scéim, ní shonraíonn sé inneall stórála, mar sin cruthófar táblaí le cibé inneall stórála réamhshocraithe a bhfuil do fhreastalaí bunachar sonraí cumraithe dó. Is é an réiteach is éasca inneall stórála réamhshocraithe do fhreastalaí bunachar sonraí a shocrú go dtí an t-inneall

Má tá seirbhís óstála á úsáid agat agus mura féidir leat inneall stórála réamhshocraithe do fhreastalaí a athrú, tá cúpla rogha agat.

- Tar éis na táblaí a chruthú, déan ráiteas `ALTER TABLE` a fhorghníomhú chun tábla a thiontú go inneall stórála nua (mar shampla InnoDB):

  ```sql
  ALTER TABLE <tablename> ENGINE=INNODB;
  ```

  Is féidir leis seo a bheith deacair má tá a lán táblaí agat.
- Rogha eile is ea an rogha init\_command a úsáid le haghaidh MySQLDB sula gcruthóidh tú do tháblaí:

  ```
  "OPTIONS": {
      "init_command": "SET default_storage_engine=INNODB",
  }
  ```

  Socraíonn sé seo an t-inneall stórála réamhshocraithe nuair a cheanglaíonn sé leis an Tar éis do tháblaí a chruthú, ba cheart duit an rogha seo a bhaint toisc go gcuireann sé ceist nach gá ach le linn cruthú tábla le gach nasc bunachar sonraí.

### Ainmneacha tábla

Tá [saincheisteanna aitheanna](https://bugs.mysql.com/bug.php?id=48875) ann fiú sna leaganacha is déanaí de MySQL a d'fhéadfadh a bheith ina chúis le cás ainm tábla a athrú nuair a dhéantar ráitis SQL áirithe a fhorghníomhú faoi choinníollacha áirithe. Moltar duit ainmneacha tábla beaga a úsáid, más féidir, chun aon fhadhbanna a d'fhéadfadh teacht chun cinn ón iompar seo a sheachaint. Úsáideann Django ainmneacha tábla beaga nuair a ghineann sé ainmneacha tábla go huathoibríoch ó mhúnlaí, mar sin is breithniú é seo den chuid is mó má tá tú ag dul i bhfeidhm ar ainm an tábla tríd an bparaiméadar: Class: ~Django.DB.Models.Options.DB\_Table.

### Sábháilteachta

\<topics-db-transactions-savepoints\>Tacaíonn an Django ORM agus MySQL araon (agus an InnoDB: Ref: inneall stórála \`á n-úsáid agat\<mysql-storage-engines\>) le bunachar sonraí: ref: \`savepoints.

\<topics-db-transactions-savepoints\>Má úsáideann tú inneall stórála MyISAM bí ar an eolas faoi do thoil go bhfaighidh tú earráidí a ghintear bunachar sonraí má dhéanann tú iarracht modhanna: ref: savepoint a bhaineann leis an API idirbhearta a úsáid. Is é an chúis atá leis seo ná gur oibríocht daor é inneall stórála bunachar sonraí/tábla MySQL a bhrath mar sin socraíodh nach fiú na modhanna seo a thiontú go dinimiciúil i no-op bunaithe i dtorthaí braite den sórt sin.

### Nótaí ar réimsí ar leith

#### Réimsí carachtar

D'fhéadfadh go mbeadh a “max\_length” teoranta do 255 carachtar ar aon réimsí a stóráiltear le cineálacha colún `VARCHAR` má tá `unique=true` á úsáid agat don réimse. Bíonn tionchar aige seo: aicme: ~django.db.models.charfield, :class: ~django.db.models.slugfield. Féach an doiciméadú MySQL \_ le haghaidh tuilleadh sonraí.

#### Teorainneacha `TextField`

Ní féidir le MySQL ach an chéad chars N de cholún `BLOB` nó TEXT\` a innéacsú. Ós rud é nach bhfuil fad sainithe ag `Textfield`, ní féidir leat é a mharcáil mar `Unique=True`. Tuairiscíonn MySQL: “COLÚN BLOB/TEXT \<db\_column\>'a úsáidtear i bpríomhshonraíocht gan fad eochair”.

#### Tacaíocht soicindí codánach do réimsí Am agus DátaTime

Is féidir le MySQL soicindí codánacha a stóráil, ar choinníoll go gcuimsíonn an sainmhíniú colún tásc codánach (m.sh. `DATETIME (6)`).

Ní dhéanfaidh Django na colúin atá ann cheana a uasghrádú chun soicind codánacha a áireamh má thacaíonn an freastala Más mian leat iad a chumasú ar bhunachar sonraí atá ann cheana, is fútsa atá sé an colún ar an spriocbhunachar sonraí a nuashonrú de láimh, trí ordú a fhorghníomhú mar:

```sql
ALTER TABLE `your_table` MODIFY `your_datetime_column` DATETIME(6)
```

\<data-migrations\>nó ag baint úsáide as: oibríocht a:class: ~django.db.migrations.Operations.Runsql in a:ref: imirce sonraí .

#### Colúin `TIMESTAMP`

\<USE\_TZ\>Má tá bunachar sonraí oidhreachta á úsáid agat ina bhfuil colúin `TIMESTAMP`, ní mór duit:setting: USE\_TZ = False \`a shocrú chun éilliú sonraí a sheachaint. :djadmin: Mapáil \`inspectdb na colúin seo chuig:class: ~django.db.models.DateTimeField agus má chumasaíonn tú tacaíocht crios ama, déanfaidh MySQL agus Django araon iarracht na luachanna a thiontú ó UTC go am áitiúil.

### Glasáil sraithe le QuerySet.Select\_for\_Update () \`\`

Ní thacaíonn MySQL agus MariaDB le roinnt roghanna don SELECT... LE HAGHAIDH RÁITEAS NUASHONRÚ. Má úsáidtear select\_for\_update () le rogha gan tacaíocht, ansin ardaítear a:exc: ~django.db.notSupportedError.

| Rogha | MariaDB | MySQL |
| --- | --- | --- |
| `SCIPEÁIL GLASÁIL` | X (≥10.6) | X |
| `NOW WAIT` | X | X |
| `OF` |  | X |
| `` `AON EOCHR `` |  |  |

Agus tú ag úsáid select\_for\_update () ar MySQL, déan cinnte go scagann tú tacar fiosrúcháin i gcoinne sraith réimsí ar a laghad atá i srianta uathúla nó amháin i gcoinne réimsí atá clúdaithe ag innéacsanna. Seachas sin, faighfear glas scríbhneoireachta eisiach thar an tábla iomlán ar feadh ré an idirbheart.

### Is féidir torthaí gan choinne a bheith ina chúis le clóscáil

Agus ceist á dhéanamh agat ar chineál sreangán, ach le luach sláimhir, cuirfidh MySQL na cineálacha na luachanna go léir sa tábla a chur i gcomhar sula ndéanfaidh sé an comparáid. Má tá na luachanna `'abc'`, def'\`\` i do thábla agus má chuireann tú ceist ar `WHERE mycolumn=0`, meaitneoidh an dá shraith. Ar an gcaoi chéanna, meaitseálfaidh `WHERE mycolumn=1` an luach 'abc1'. Dá bhrí sin, caitheoidh réimsí cineál sreangán atá san áireamh i Django an luach chuig teaghrán i gcónaí sula n-úsáidtear é i bhfiosrú

Má chuireann tú réimsí samhail saincheaptha a chuireann oidhreacht ó:class: ~Django.db.Models.Field i bhfeidhm go díreach, tá siad róthéar:meth: ~django.db.models.field.get\_prep\_value, nó úsáide:class: ~django.db.Models.Expressions.rawsql, :meth: ~django.db.db.s.query.queryset.extra, nó: meth: ~django.db.models.manager.raw, ba cheart duit a chinntiú go ndéanann tú cineastáil iomchuí.

## Nótaí SQLite

Tacaíonn Django le SQLite 3.31.0 agus níos déanaí.

Soláthraíonn [SQLite](https://www.sqlite.org/) rogha forbartha den scoth d'iarratais nach bhfuil léite amháin den chuid is mó nó a dteastaíonn lorg suiteála níos lú uathu. Mar is amhlaidh le gach freastalaithe bunachar sonraí, áfach, tá roinnt difríochtaí ann atá sonrach do SQLite ar chóir duit a bheith ar an eolas fúthu.

### Meaitseáil fo-shraith agus íogaireacht

For all SQLite versions, there is some slightly counterintuitive behavior when
attempting to match some types of strings.  These are triggered when using the
[`iexact`](/ga/5.2/ref/models/querysets/#std-fieldlookup-iexact) or [`contains`](/ga/5.2/ref/models/querysets/#std-fieldlookup-contains) filters in querysets. The behavior
splits into two cases:

\1. For substring matching, all matches are done case-insensitively. That is a
filter such as `filter(name__contains="aa")` will match a name of `"Aabb"`.

\2. For strings containing characters outside the ASCII range, all exact string
matches are performed case-sensitively, even when the case-insensitive options
are passed into the query. So the [`iexact`](/ga/5.2/ref/models/querysets/#std-fieldlookup-iexact) filter will behave exactly
the same as the [`exact`](/ga/5.2/ref/models/querysets/#std-fieldlookup-exact) filter in these cases.

Tá roinnt réamhshocruithe féideartha chuige seo [doiciméadaithe ag sqlite.org](https://www.sqlite.org/faq.html#q18), ach ní úsáideann an cúltaca réamhshocraithe SQLite i Django iad, mar bheadh sé deacair measartha iad a ionchorprú go láidir. Dá bhrí sin, nochtann Django an t-iompar réamhshocraithe SQLite agus ba chóir duit a bheith ar an eolas faoi seo agus tú ag déanamh scagadh cás-neamh-íogair nó fo-string.

### Láimhseáil deach

Níl aon chineál inmheánach dáiríre deachúil ag SQLite. Déantar luachanna deachúla a thiontú go hinmheánach go dtí an cineál sonraí REAL\` (uimhir phointe snámh IEEE 8-bheart), mar a mhínítear sa doiciméadú SQLite datatypees' \_\_, ionas nach dtacaíonn siad le huimhríocht snámphointe deachúil cruinn i gceart.

### Earráidí “Tá bunachar sonraí faoi ghlas”

Tá sé i gceist gur bunachar sonraí éadrom é SQLite, agus dá bhrí sin ní féidir leis tacú le leibhéal ard comhréireachta. OperationalError: tá bunachar sonraí faoi ghlas léiríonn earráidí go bhfuil níos mó comhréireachta ag d'iarratas ná mar is féidir le sqlite a láimhseáil i gcumraíocht réamhshocraithe. Ciallaíonn an earráid seo go bhfuil glas eisiach ag snáithe nó próiseas amháin ar nasc an bhunachar sonraí agus snáithe eile amuigh amach ag fanacht go scaoilfear an glas.

Tá luach ama réamhshocraithe ag fillteán SQLite Python a chinneann cé chomh fada agus a cheadaítear don dara snáithe fanacht ar an glas sula n-aimsíonn sé amach agus ardaíonn sé an earráid OperationalError: bunachar sonraí faoi ghlas .

Má tá an earráid seo á fháil agat, is féidir leat é a réiteach trí:

- Aistriú go cúltaca bunachar sonraí eile. Ag pointe áirithe éiríonn SQLite ró-“ lite” d'fheidhmchláir an domhain fíor, agus léiríonn na cineálacha earráidí comhréireachta seo gur shroich tú an pointe sin.
- Do chód a athscríobh chun comhréireacht a laghdú agus a chinntiú go bhfuil idirbhearta bunachar sonraí gearrré.
- Méadaigh an luach ama réamhshocraithe tríd an rogha bunachar sonraí timeout\` a shocrú:

  ```
  "OPTIONS": {
      # ...
      "timeout": 20,
      # ...
  }
  ```

  Cuirfidh sé seo ar SQLite fanacht beagán níos faide sula gcaitheann sé earráidí “tá bunachar sonraí faoi ghlas”; ní dhéanfaidh sé aon rud i ndáiríre chun iad a réiteach.

#### Iompar idirbhearta

> **New in Django 5.1**

Tacaíonn SQLite le trí mhodh idirbheart: `DIFRÉAD`, IMMEDIATE\`, agus `EXCLUSIVE`.

Is é an réamhshocraithe ná `FERRED`. Más gá duit modh difriúil a úsáid, socraigh é sa chuid:SETTING: OPTIONS de do chumraíocht bunachar sonraí in:setting: DATABASES, mar shampla:

```
"OPTIONS": {
    # ...
    "transaction_mode": "IMMEDIATE",
    # ...
}
```

Chun a chinntiú go fanann d'idirbhearta go dtí go n-ardóidh tú “Timeout” sula ndéantar “Bunachar Sonraí faoi ghlas”, athraigh an modh idirbheart go `IMREACHTA`.

Chun an fheidhmíocht is fearr le IMMEDIATE\` agus `EXCLUSIVE`, ba chóir go mbeadh idirbhearta chomh gearr agus is féidir. B'fhéidir go mbeadh sé deacair é seo a ráthú do chuid tuairimí go léir mar sin díspreagtar úsáid:setting: ATOMIC\_REQUESTS \<DATABASE-ATOMIC\_REQUESTS\>\`sa chás seo.

Le haghaidh tuilleadh faisnéise féach [Idirbhearta i SQLite](https://www.sqlite.org/lang_transaction.html#deferred_immediate_and_exclusive_transactions).

### QuerySet.Select\_for\_Update () níl tacaíocht

Ní thacaíonn SQLite leis an SELECT... LE HAGHAIDH COMHRÉIR A NUASHONRÚ. Ní bheidh aon éifeacht ag glaoch air.

### Lionadh agus tú ag úsáid QuerySet.iterator () \`\`

Tá breithnithe speisialta ann a thuairiscítear in [Isolation In SQLite](https://www.sqlite.org/isolation.html) agus tábla á mhodhnú agus tú ag athrú air ag baint úsáide as: meth: .querySet.iterator. Má chuirtear sraith leis, a athraítear nó a scriosadh laistigh den lúb, ansin d'fhéadfadh nó nach mbeadh an tsraith sin le feiceáil, nó d'fhéadfadh sé a bheith le feiceáil faoi dhó, i dtorthaí ina dhiaidh sin a fhaightear ón iterator. Caithfidh do chód é seo a láimhseáil.

### Síneadh JSON1 a chumasú ar SQLite

Chun: class: ~django.db.models.jsonField a úsáid ar SQLite, ní mór duit an síneadh JSON1 \`\_ a chumasú ar leabharlann Python 's:PY:MOD: \`sqlite3. Mura bhfuil an síneadh cumasaithe ar do shuiteáil, ardófar earráid chórais (Fields.e180).

Chun an síneadh JSON1 a chumasú is féidir leat an treoir a leanúint ar [an leathanach wiki](https://code.djangoproject.com/wiki/JSON1Extension).

> **Note**
>
> Tá an síneadh JSON1 cumasaithe de réir réamhshocraithe ar SQLite 3.38+.

### Roghanna pragma a shocrú

> **New in Django 5.1**

Is féidir Pragma roghanna \`\_ a shocrú ar nasc tríd an \`\`init\_command \`\`a úsáid sa chuid: setting: \`OPTIONS de chumraíocht do bhunachar sonraí in:setting: DATABASES. Taispeánann an sampla thíos conas marthanacht bhreise na scríbhneoireachtaí sioncrónach a chumasú agus an cache\_size\` a athrú:

```
DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.sqlite3",
        # ...
        "OPTIONS": {
            "init_command": "PRAGMA synchronous=3; PRAGMA cache_size=2000;",
        },
    }
}
```

## Nótaí Oracle

Django supports [Oracle Database Server](https://www.oracle.com/) versions 19c and higher. Version
2.3.0 or higher of the [oracledb](https://oracle.github.io/python-oracledb/) Python driver is required.

> **Deprecated since Django 5.0**
>
> Deprecated since version 5.0: Tá tacaíocht do `CX_Oracle` díluaite.

Ionas go n-oibreoidh an t-ordú python manage.py migrate\`, ní mór pribhléidí a bheith ag d'úsáideoir bunachar sonraí Oracle chun na horduithe seo a leanas a reáchtáil:

- CRUTHAIGH TÁBLA
- SEICHEAMH A CHRUTHÚ
- CRUTHÚ NÓS IMEACHTA
- CRUTHAIGH TRUICEAR

Chun sraith tástála tionscadail a reáchtáil, de ghnáth teastaíonn na pribhléidí\* breiseanna\* seo ón úsáideoir

- CRUTHAIGH ÚSÁIDEOIR
- ATHRAIGH ÚSÁIDEOIR
- SCAOIL ÚSÁIDEOIR
- CRUTHAIGH SPÁS TÁBLA
- SPÁS TÁBLA TITIM
- CRUTHAIGH SEISIÚN LE ROGHA RIARACHÁIN
- CRUTHAIGH TÁBLA LE ROGHA RIARACHÁIN
- CRUTHAIGH SEICHEAMH LE ROGHA RIARACHÁIN
- CRUTHAIGH NÓS IMEACHTA LE ROGHA RIARACHÁIN
- CRUTHAIGH TRUICEAR LE ROGHA RIARACHÁIN

Cé go bhfuil na pribhléidí riachtanacha `CREATE TABLE`, CREATE SEQUENCE\`, CREATE PROCESURE\`, agus CREATE TRIGGER\`, agus is féidir le húsáideoir deonaithe RESOURCE WITH ADMIN OPTION\` a dheonú `ACMHAIN`, ní féidir le húsáideoir den sórt sin na pribhléidí aonair a dheonú (m.sh. CREATE TABLE\`), agus dá bhrí sin RESOURCE WITH ADMIN OPTION\` Ní leor de ghnáth chun tástálacha a reáchtáil.

Cruthaíonn roinnt sraith tástála tuairimí nó tuairimí ábhartha freisin; chun iad seo a reáchtáil, teastaíonn pribhléidí “CREATE VIEW WITH ADMIN ROGHA” agus CRUTHAIGH AMHARC ÁIRITHE LE ROGHA ADMIN ag an úsáideoir freisin. Go háirithe, tá sé seo ag teastáil le haghaidh sraith tástála Django féin.

Tá na pribhléidí seo go léir san áireamh sa ról DBA, atá oiriúnach le húsáid ar bhunachar sonraí forbróra príobháideach.

Úsáideann cúltaca bunachar sonraí Oracle na pacáistí `SYS.DBMS_LOB` agus SYS.DBMS\_RANDOM\`, mar sin beidh ceadanna forghníomhaithe ag teastáil ó úsáideoir. De ghnáth bíonn sé inrochtana do gach úsáideoir de réir réamhshocraithe, ach i gcás nach bhfuil, beidh ort ceadanna mar sin a dheonú:

```sql
GRANT EXECUTE ON SYS.DBMS_LOB TO user;
GRANT EXECUTE ON SYS.DBMS_RANDOM TO user;
```

### Ceangal leis an mbunachar sonraí

Chun nascadh ag baint úsáide as ainm seirbhíse do bhunachar sonraí Oracle, ba chóir go mbeadh cuma mar seo ar do chomhad settings.py\`:

```
DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.oracle",
        "NAME": "xe",
        "USER": "a_user",
        "PASSWORD": "a_password",
        "HOST": "",
        "PORT": "",
    }
}
```

Sa chás seo, ba chóir duit an bheirt: setting: HOST agus:setting: PORT a fhágáil folamh. Mar sin féin, mura n-úsáideann tú comhad tnsnames.ora nó modh ainmniúcháin den chineál céanna agus mura dteastaíonn uait nascadh ag baint úsáide as an SID (“xe” sa sampla seo), ansin líon isteach an bheath:setting: HOST agus:setting: PORT mar sin:

```
DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.oracle",
        "NAME": "xe",
        "USER": "a_user",
        "PASSWORD": "a_password",
        "HOST": "dbprod01ned.mycompany.com",
        "PORT": "1540",
    }
}
```

Ba chóir duit an dá cheann: setting: HOST agus:setting: PORT a sholáthar, nó an dá cheann a fhágáil mar theagáin folamh. Úsáidfidh Django tuairiscí ceangail difriúil ag brath ar an rogha sin.

#### DSN Iomlán agus Easy Connect

Is féidir teaghrán Iomlán DSN nó Easy Connect a úsáid in:socrú: AINM má tá an bheirt: socrú: HOST agus: socrú: PORT \`folamh. Tá an fhormáid seo ag teastáil nuair a úsáidtear RAC nó bunachair sonraí inphlugáilte gan \`\`tnsnames.ora \`, mar shampla.

Sampla de shreang Easy Connect:

```
"NAME": "localhost:1521/orclpdb1"
```

Sampla de shreang iomlán DSN:

```
"NAME": (
    "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))"
    "(CONNECT_DATA=(SERVICE_NAME=orclpdb1)))"
)
```

### Linn snámha nasc

> **New in Django 5.2**

To use a connection pool with [oracledb](https://oracle.github.io/python-oracledb/), set `"pool"` to `True` in the
[`OPTIONS`](/ga/5.2/ref/settings/#std-setting-OPTIONS) part of your database configuration. This uses the driver's
[create\_pool()](https://python-oracledb.readthedocs.io/en/latest/user_guide/connection_handling.html#connection-pooling) default values:

```
DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.oracle",
        # ...
        "OPTIONS": {
            "pool": True,
        },
    },
}
```

To pass custom parameters to the driver's [create\_pool()](https://python-oracledb.readthedocs.io/en/latest/user_guide/connection_handling.html#connection-pooling)  function, you can
alternatively set `"pool"` to be a dict:

```
DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.oracle",
        # ...
        "OPTIONS": {
            "pool": {
                "min": 1,
                "max": 10,
                # ...
            }
        },
    },
}
```

### Rogha snáithithe

Má tá sé ar intinn agat Django a reáchtáil i dtimpeallacht ilsnáithe (m.sh. Apache ag baint úsáide as an modúl MPM réamhshocraithe ar aon chóras oibriúcháin nua-aimseartha), ansin ní mór duit\*\* an rogha ```snáithe ``de chumraíocht bunachar sonraí Oracle a shocrú go `True```:

```
"OPTIONS": {
    "threaded": True,
}
```

D'fhéadfadh timpeanna agus iompar aisteach eile a bheith mar thoradh ar mhainneachtain é seo a dhéanamh.

### CUIR ISTEACH... AG FILLEADH ISTEACH

De réir réamhshocraithe, úsáideann cúltaca Oracle clásal ```RETURNING INTO` chun luach ``Autofield``` a aisghabháil go héifeachtúil agus sraitheanna nua á chur isteach. D'fhéadfadh go mbeadh “Error bunachar sonraí” mar thoradh ar an iompar seo i socruithe neamhghnácha áirithe, mar shampla nuair a chuirtear isteach i dtábla iargúlta, nó i radharc le truicear ```INSTEAD OF`. Is féidir an clásal ``RETURNING INTO` a dhíchumasú tríd an rogha ``use_returning_into``` de chumraíocht an bhunachar sonraí a shocrú go `False`:

```
"OPTIONS": {
    "use_returning_into": False,
}
```

Sa chás seo, úsáidfidh cúltaca Oracle ceist `SELECT` ar leithligh chun luachanna Autofield\` a aisghabháil.

### Saincheisteanna ainmni

Cuireann Oracle teorainn fad ainm de 30 carachtar i bhfeidhm. Chun freastal air seo, cuireann an cúltaca aitheantóirí bunachar sonraí a fheistiú, agus luach hash MD5 in-athsheolta in ionad ceithre charachtar deiridh den ainm gearrtha. Ina theannta sin, casann an cúltaca aitheantóirí bunachar sonraí go uile-uachtaracha.

Chun na claochlú seo a chosc (ní theastaíonn sé seo de ghnáth ach amháin nuair a dhéileálann tú le bunachair sonraí oidhreachta nó rochtain a fháil ar tháblaí a bhaineann le húsáideoirí eile), bain úsáid as ainm luaite mar luach do db\_table\`:

```
class LegacyModel(models.Model):
    class Meta:
        db_table = '"name_left_in_lowercase"'

class ForeignModel(models.Model):
    class Meta:
        db_table = '"OTHER_USER"."NAME_ONLY_SEEMS_OVER_30"'
```

Is féidir ainmneacha luaite a úsáid freisin le cúltaca bunachar sonraí tacaithe eile Django; seachas Oracle, áfach, níl aon éifeacht ag na luachana.

Agus `imirce` á reáchtáil, féadfar earráid `ORA-06552` a bheith ann má úsáidtear eochairfhocail áirithe Oracle mar ainm réimse samhail nó luach rogha `db_column`. Luann Django gach aitheantóir a úsáidtear i gceisteanna chun an chuid is mó de na fadhbanna den sórt sin a chosc, ach is féidir an earráid seo tarlú fós nuair a úsáidtear cineál sonraí Oracle mar ainm colún Go háirithe, bí cúramach na hainmneacha ```dáta ``, `timestamp```, `uimhre` nó `snám` a sheachaint mar ainm réimse.

### NULL agus teaghráin folamh

Is fearr le Django go ginearálta an teaghrán folamh a úsáid seachas `NULL`, ach déileálann Oracle leis an dá rud céanna. Chun timpeall air seo, déanann cúltaca Oracle neamhaird ar rogha sainráite `null` ar réimsí a bhfuil an teaghrán folamh acu mar luach féideartha agus a ghineann DDL amhail is dá mba `Null = True`. Nuair a bhfaightear ón mbunachar sonraí, glactar leis go gciallaíonn luach `NULL` i gceann de na réimsí seo an sreang folamh i ndáiríre, agus déantar na sonraí a thiontú go ciúin chun an toimhde seo a léiriú.

### Teorainneacha `TextField`

The Oracle backend stores each `TextField` as an `NCLOB` column. Oracle
imposes some limitations on the usage of such LOB columns in general:

- Ní féidir colúin LOB a úsáid mar eochracha príomhúil.
- Ní féidir colúin LOB a úsáid in innéacsanna.
- Ní féidir colúin LOB a úsáid i liosta `SELECT DISTINCT`. Ciallaíonn sé seo go mbeidh earráid ```ORA-00932` mar thoradh ar iarracht an modh ``QuerySet.Distinct' a úsáid ar mhúnla a chuimsíonn colúin ``TextField``` mar thoradh ar earráid ```ORA-00932` nuair a bheidh á reáchtáil i gcoinne Oracle. Mar réiteach, bain úsáid as an modh ``QuerySet.defer``` i gcomhar le ```different () ``chun cosc a chur ar cholúin ``TextField``` a chur san áireamh sa liosta `SELECT DISTINCT`.

## Fo-aicmiú na gcúltaca bunachar sonraí ionsuite

Tagann Django le cúltaca bunachar sonraí ionsuite. Féadfaidh tú cúltaca bunachar sonraí atá ann cheana a fho-aicmiú chun a iompar, a ghnéithe nó a chumraíocht a mhodhnú.

Smaoinigh, mar shampla, go gcaithfidh tú gné bunachar sonraí amháin a athrú. Ar dtús, caithfidh tú eolaire nua a chruthú le modúl base ann. Mar shampla:

```text
mysite/
    ...
    mydbengine/
        __init__.py
        base.py
```

Caithfidh rang darb ainm `DatabaseWrapper` a bheith sa mhodúl `base.py` a fho-aicmíonn inneall atá ann cheana ón modúl `django.db.backends`. Seo sampla de fho-aicmiú an inneall PostgreSQL chun aicme gné allows\_group\_by\_selected\_pks\_on\_model\` a athrú:

*`mysite/mydbengine/base.py`*

```python
from django.db.backends.postgresql import base, features

class DatabaseFeatures(features.DatabaseFeatures):
    def allows_group_by_selected_pks_on_model(self, model):
        return True

class DatabaseWrapper(base.DatabaseWrapper):
    features_class = DatabaseFeatures
```

Faoi dheireadh, ní mór duit a: setting: DATABASE-ENGINE a shonrú i do chomhad `settings.py`:

```
DATABASES = {
    "default": {
        "ENGINE": "mydbengine",
        # ...
    },
}
```

Is féidir leat an liosta reatha d'innill bunachar sonraí a fheiceáil trí fhéachaint isteach: source: django/db/backends.

## Úsáid cúltaca bunachar sonraí 3ú páirtí

Chomh maith leis na bunachair sonraí a thacaítear go hoifigiúil, tá cúltaca ann a sholáthraíonn tríú páirtithe a ligeann duit bunachair sonraí eile a úsáid le Django:

- \<django-cockroachdb\>:pypi: CockroachDB \`
- \<django-firebird\>:pypi: Bird dóiteáin \`
- \<django-google-spanner\>:pypi: Google Cloud Spanner \`
- \<mssql-django\>:pypi: Freastalaí SQL Microsoft \`
- [MongoDB](https://pypi.org/project/django-mongodb-backend/)
- \<django-snowflake\>:pypi: Snowflake \`
- \<django-tidb\>:pypi: TiDB \`
- \<django-yugabytedb\>:pypi: YugabyteDB \`

Tá athrú mór ag leaganacha Django agus gnéithe ORM a thacaíonn na cúltaca neamhfhoifigiúla seo. Ba cheart ceisteanna maidir le cumais shonracha na gcúltaca neamhoifigiúla seo, mar aon le haon cheisteanna tacaíochta, a threorú chuig na bealaí tacaíochta a sholáthraíonn gach tionscadal tríú
