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 15 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.pyDATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql",
"OPTIONS": {
"service": "my_service",
"passfile": ".my_pgpass",
},
}
}
.pg_service.conf[my_service]
host=localhost
user=USER
dbname=NAME
port=5432
.my_pgpasslocalhost: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),
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`_. 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,
},
}
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:
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í:
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:
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:
>>> 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.11 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
Django supports MySQL 8.4 and higher.
Ú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:
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:
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:
# settings.py
DATABASES = {
"default": {
"ENGINE": "django.db.backends.mysql",
"OPTIONS": {
"read_default_file": "/path/to/my.cnf",
},
}
}
# 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
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ú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:
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ú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 TABLEa fhorghníomhú chun tábla a thiontú go inneall stórála nua (mar shampla InnoDB):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áblaLink to this heading
Tá 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:
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 |
|---|---|---|
|
X |
X |
|
X |
X |
|
X |
|
|
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
Django supports SQLite 3.37.0 and later.
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ú:
"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:
"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ú:
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ú:
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`:
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 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:
"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 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:
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:
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:
"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`:
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áidORA-00932` mar thoradh ar iarracht an modh ``QuerySet.Distinct' a úsáid ar mhúnla a chuimsíonn colúin ``TextFieldmar thoradh ar earráidORA-00932` nuair a bheidh á reáchtáil i gcoinne Oracle. Mar réiteach, bain úsáid as an modh ``QuerySet.deferi gcomhar ledifferent () ``chun cosc a chur ar cholúin ``TextFielda chur san áireamh sa liostaSELECT 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:
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.pyfrom 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í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 `
<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íú