Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk bemutatja, hogyan hozhat létre modellkódot egy meglévő SQL Server-adatbázisból a Django inspectdb felügyeleti parancsának használatával.
Prerequisites
Adja hozzá a(z) mssql elemet a(z) settings.py-beli INSTALLED_APPS eleméhez. Ez a lépés regisztrálja a inspectdb kezelőparancs mssql-django felülírását, amely hozzáadja a --schema kapcsolót a nem alapértelmezett sémák vizsgálatához:
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"mssql",
"myapp",
]
Note
Az mssql adatbázis háttérrendszere ezen lépés nélkül működik. A(z) "mssql" hozzáadása a(z) INSTALLED_APPS elemhez csak a(z) --schema jelző engedélyezéséhez szükséges a(z) inspectdb esetében. Nélküle inspectdb csak az alapértelmezett sémát (dbo) vizsgálja meg.
Alapszintű használat
Modellek létrehozása a konfigurált adatbázisban lévő összes táblához:
python manage.py inspectdb
Mentse a kimenetet közvetlenül egy modellfájlba:
python manage.py inspectdb > myapp/models.py
Adott táblák vizsgálata
Csak adott táblákhoz hozzon létre modelleket:
python manage.py inspectdb MyTable AnotherTable
Többséma támogatása
A mssql-django háttérrendszer kibővíti a inspectdb rendszert, hogy több sémát is támogasson. Adjon meg egy sémát a --schema jelölővel:
python manage.py inspectdb --schema "dbo"
python manage.py inspectdb --schema "sales"
Ez a funkció SQL Server olyan adatbázisok esetében hasznos, amelyek táblákat rendszereznek több séma között.
Több sémából származó modellek kezelése
Ha az adatbázis több sémát használ, a modell Meta osztályában a db_table használatával adja meg a tábla sémanévvel kiegészített nevét. Előfordulhat, hogy a inspectdb létrehozott modellek nem tartalmaznak sémaelőtagokat, ezért vegye fel őket manuálisan:
class Customer(models.Model):
customer_id = models.AutoField(primary_key=True)
name = models.CharField(max_length=200)
class Meta:
managed = False
db_table = "[sales].[Customer]"
class Product(models.Model):
product_id = models.AutoField(primary_key=True)
name = models.CharField(max_length=100)
price = models.DecimalField(max_digits=10, decimal_places=2)
class Meta:
managed = False
db_table = "[inventory].[Product]"
Important
Használjon szögletes kétrészes nevet, például "[schema].[table]". A háttérrendszer egyetlen azonosítóként kezeli db_table , így a zárójeles nevek helyesen megmaradnak, míg a kettős idézőjelű űrlapok szó szerinti táblanévként vannak újra idézve.
Sémaközi idegen kulcsok
A Django a sémák közötti idegenkulcs-kapcsolatokat mindaddig követheti, amíg mindkét tábla ugyanabban az adatbázisban van, és az db_table értékek helyesen vannak beállítva:
class OrderItem(models.Model):
order_item_id = models.AutoField(primary_key=True)
product = models.ForeignKey("Product", on_delete=models.CASCADE)
quantity = models.IntegerField()
class Meta:
managed = False
db_table = "[sales].[OrderItem]"
A Django a ForeignKey értékét a hivatkozott modell db_table értéke alapján oldja fel, így a kapcsolati mezőn nincs szükség további sémabeállításra.
Létrehozott modellek áttekintése
A inspectdb parancs olyan modellkódot hoz létre, amely manuális módosításokat igényelhet:
Beállítás
managed = False: A létrehozott modellek belefoglalnakmanaged = FalseazMetaosztályba, ami azt jelenti, hogy a Django nem kezeli a táblázatsémát. Távolítsa el ezt a sort, ha azt szeretné, hogy a Django kezelje a tábla áttelepítéseit.Elsődleges kulcsok hozzáadása: Ha egy tábla nem rendelkezik észlelhető elsődleges kulccsal, előfordulhat, hogy
inspectdbmanuálisan kell hozzáadnia egyet.Kapcsolatmezők javítása: Előfordulhat, hogy az idegenkulcs-kapcsolatok kiigazításra szorulnak, különösen a sémaközi hivatkozások esetében.
Példa a létrehozott kimenetre:
class Product(models.Model):
product_id = models.AutoField(primary_key=True)
name = models.CharField(max_length=100)
price = models.DecimalField(max_digits=10, decimal_places=2)
created_at = models.DateTimeField(blank=True, null=True)
class Meta:
managed = False
db_table = "Product"
Limitations
A inspectdb parancs az alábbi korlátozásokkal rendelkezik a SQL Server használatakor.
Összetett elsődleges kulcs ellenőrzése
Előfordulhat, hogy az összetett elsődleges kulcsokkal rendelkező táblák nem hoznak létre teljes modelldefiníciókat. A Django 5.2-es és újabb verzióiban a inspectdb futtatása után kézzel definiálja a CompositePrimaryKey elemet, vagy használjon surrogate elsődleges kulcsot.
Views
A inspectdb parancs megvizsgálhatja a nézeteket, de a létrehozott modellekhez szükség lehet a mezőtípusok és a null kényszerek manuális módosítására.