Bunachair sonraíLink to this heading

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áltaLink to this heading

Naisc leanúnachaLink to this heading

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 nascLink to this heading

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.

RabhadhLink to this heading

Ó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úLink to this heading

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í PostgreSQLLink to this heading

Django supports PostgreSQL 14 and higher. psycopg 3.1.12+ or psycopg2 2.9.9+ is required, though the latest psycopg 3.1.12+ is recommended.

Socruithe nasc PostgreSQLLink to this heading

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

Chun ceangal ag baint úsáide as ainm seirbhíse ón comhad seirbhíse nasc agus pasfhocal ón comhad pasfhocal, 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.

Cumraíocht PostgreSQL a bharrfheabhsúLink to this heading

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.

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úLink to this heading

Cosúil le PostgreSQL féin, déanann Django réamhshocrú ar an leibhéal aonair READ COMMITTED`_. 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:

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

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

RólLink to this heading

If you need to use a different role for database connections than the role used to establish the connection, set it in the OPTIONS part of your database configuration in DATABASES:

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

Linn snámha nascLink to this heading

Chun linn nasc le psycopg 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í:

Code
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íLink to this heading

<psycopg:client-side-binding-cursors>Le psycopg 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:

Code
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 textLink to this heading

When specifying db_index=True on your model fields, Django typically outputs a single CREATE INDEX statement. However, if the database type for the field is either varchar or text (e.g., used by CharField, FileField, and TextField), then Django will create an additional index that uses an appropriate PostgreSQL operator class for the column. The extra index is necessary to correctly perform lookups that use the LIKE operator in their SQL, as is done with the contains and startswith lookup types.

Oibríocht imirce chun síntí a churLink to this heading

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íLink to this heading

<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.

Comhdhlúthú idirbheart agus cúrsaí taobh an fhreastalaíLink to this heading

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

<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íochLink to this heading

Úsáideann Django colúin aitheantais PostgreSQL chun eochracha bunmhéadaithe uathoibríoch a stóráil. Tá luachanna ó seicheamh 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:

Python console
>>> 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íLink to this heading

Is féidir leat an socrú:setting: TEST ['<TEST_TEMPLATE>TEMPLATE'] `a úsáid chun `teimpléad 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-bhuanLink to this heading

< https://www.postgresql.org/docs/current/non-durability.html>Is féidir leat amanna forghníomhaithe tástála a bhrostú trí `PostgreSQL a chumrú le bheith neamh-bhuanaithe`_.

Nótaí MariaDBLink to this heading

Django supports MariaDB 10.6 and higher.

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í MySQLLink to this heading

Tacaíocht leaganLink to this heading

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álaLink to this heading

Tá roinnt inneall stórála ag MySQL. Is féidir leat an t-inneall stórála réamhshocraithe a athrú i gcumraíocht na freastala

Is é InnoDB 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 ná nach dtacaíonn sé le hidirbhearta nó nach bhforfheidhmíonn sé srianta eachtracha eachtrach.

Tiománaithe API MySQL DBLink to this heading

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

  • mysqlclient is a native driver. It's the recommended choice.

  • Is tiománaí íon Python ó Oracle é MySQL 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 `_.

mysqlclientLink to this heading

Django requires mysqlclient 2.2.1 or later.

Ceanglóir MySQL/PythonLink to this heading

Tá MySQL Connector/Python ar fáil ón leathanach íoslódálaí. 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 amaLink to this heading

Má tá sé ar intinn agat Django's:doc: timezone taca a úsáid, bain úsáid as mysql_tzinfo_to_sql 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íLink to this heading

Is féidir leat do bhunachar sonraí a chruthai 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áireachtaLink to this heading

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ú 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, 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.

Ceangal leis an mbunachar sonraíLink to this heading

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

Úsáidtear socruithe nasc san ord seo:

  1. : socrú: ROGHANNAÍ.

  2. NAME, USER, PASSWORD, HOST, 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 a sháraigh.

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

Code
# 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_modeLink to this heading

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úLink to this heading

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

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úLink to this heading

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í:

    Code
    "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áblaLink to this heading

saincheisteanna aitheanna 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áilteachtaLink to this heading

<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 leithLink to this heading

Réimsí carachtarLink to this heading

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 TextFieldLink to this heading

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átaTimeLink to this heading

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 TIMESTAMPLink to this heading

<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 () ``Link to this heading

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

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áilLink to this heading

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í SQLiteLink to this heading

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

Soláthraíonn SQLite 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 íogaireachtLink to this heading

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 or 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 filter will behave exactly the same as the exact filter in these cases.

Tá roinnt réamhshocruithe féideartha chuige seo doiciméadaithe ag sqlite.org, 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 deachLink to this heading

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”Link to this heading

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ú:

    Code
    "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 idirbheartaLink to this heading

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:

Code
"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.

``QuerySet.Select_for_Update () ``níl tacaíochtLink to this heading

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 () ``Link to this heading

Tá breithnithe speisialta ann a thuairiscítear in Isolation In SQLite 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 SQLiteLink to this heading

To use JSONField on SQLite, you need to enable the JSON1 extension on Python's sqlite3 library. If the extension is not enabled on your installation, a system error (fields.E180) will be raised.

Chun an síneadh JSON1 a chumasú is féidir leat an treoir a leanúint ar an leathanach wiki.

Roghanna pragma a shocrúLink to this heading

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ú:

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

Nótaí OracleLink to this heading

Django supports Oracle Database Server versions 19c and higher. Version 2.3.0 or higher of the oracledb Python driver is required.

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íLink to this heading

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`:

Code
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:

Code
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 ConnectLink to this heading

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:

Code
"NAME": "localhost:1521/orclpdb1"

Sampla de shreang iomlán DSN:

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

Linn snámha nascLink to this heading

To use a connection pool with oracledb, set "pool" to True in the OPTIONS part of your database configuration. This uses the driver's create_pool() default values:

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

To pass custom parameters to the driver's create_pool() function, you can alternatively set "pool" to be a dict:

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

CUIR ISTEACH... AG FILLEADH ISTEACHLink to this heading

By default, the Oracle backend uses a RETURNING INTO clause to efficiently retrieve the value of an AutoField when inserting new rows. This behavior may result in a DatabaseError in certain unusual setups, such as when inserting into a remote table, or into a view with an INSTEAD OF trigger. The RETURNING INTO clause can be disabled by setting the use_returning_into option of the database configuration to False:

Code
"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 ainmniLink to this heading

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`:

Code
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.

When running migrate, an ORA-06552 error may be encountered if certain Oracle keywords are used as the name of a model field or the value of a db_column option. Django quotes all identifiers used in queries to prevent most such problems, but this error can still occur when an Oracle datatype is used as a column name. In particular, take care to avoid using the names date, timestamp, number or float as a field name.

NULL agus teaghráin folamhLink to this heading

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 TextFieldLink to this heading

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í ionsuiteLink to this heading

Django comes with built-in database backends. You may subclass an existing database backend to modify its behavior, features, or configuration.

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:

Code
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íLink to this heading

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

  • <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íú