加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

Django操作mysql數(shù)據(jù)庫(二)

07/01 15:24
817
閱讀需 10 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

模型文檔地址

https://docs.djangoproject.com/en/3.0/topics/db/models/

實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn)

上一篇文檔,我們把這個(gè)模型的流程,通過pycharm走通了,那么,我們現(xiàn)在就可以根據(jù)官方文檔,碼代碼了。

1、ORM設(shè)計(jì)思想

即Object-Relationl Mapping,它的作用是在關(guān)系型數(shù)據(jù)庫和對象之間作一個(gè)映射,可以認(rèn)為,django通過models將python語言翻譯成了數(shù)據(jù)庫執(zhí)行語句 。

例如,下面的代碼1和代碼2是等價(jià)的:

代碼1(python):

from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)

代碼2(sql):

CREATE TABLE myapp_person (
    "id" serial NOT NULL PRIMARY KEY,
    "first_name" varchar(30) NOT NULL,
    "last_name" varchar(30) NOT NULL
);

2、django的模型使用

上一篇文檔中,我們在使用模型上遇到了一些坑,其中一個(gè)是要把應(yīng)用進(jìn)行注冊才能使用模型。這點(diǎn)在官方文檔也是說明了的:

Once you have defined your models, you need to tell Django you’re going to use those models. Do this by editing your settings file and changing the INSTALLED_APPS setting to add the name of the module that contains your models.py.

3、字段

Django附帶了幾十個(gè)內(nèi)置字段類型,可以在模型字段引用中找到完整的列表。如果Django的內(nèi)置字段不能實(shí)現(xiàn)這個(gè)功能,也可以很容易地編寫自己的字段。

字段類型:https://docs.djangoproject.com/en/3.0/ref/models/fields/#model-field-types

自定義:https://docs.djangoproject.com/en/3.0/howto/custom-model-fields/

(1)字段的參數(shù)定義(這里截取上一個(gè)文檔的例子):

loginname = models.CharField(max_length=20, null=False, unique=True)

在這里插入圖片描述

如上,對于字段有一些通用參數(shù):

@參數(shù) null:
為True,將空值存儲為NULL,否則不存儲

@參數(shù)blank:
為True,允許輸入空值;為False,則必填

@參數(shù)choices:
YEAR_IN_SCHOOL_CHOICES = [
(‘FR’, ‘Freshman’),
(‘SO’, ‘Sophomore’),
(‘JR’, ‘Junior’),
(‘SR’, ‘Senior’),
(‘GR’, ‘Graduate’),
]

用于頁面上的選擇框標(biāo)簽,models提供一個(gè)二維的二元元組,第一個(gè)元素表示存在數(shù)據(jù)庫內(nèi)真實(shí)的值,第二個(gè)表示頁面上顯示的具體內(nèi)容。

@參數(shù)default:
字段的默認(rèn)值。它可以是值或可調(diào)用對象。

@參數(shù)help_text:
把鼠標(biāo)放到頁面部件上,會顯示

@參數(shù)primary_key:
如果為True,自定義該字段為模型的主鍵,屬性為只讀。 django會自動添加一個(gè)IntegerField來保存主鍵,即id:

id = models.AutoField(primary_key=True)

@參數(shù)unique:
如果為真,則該字段必須在整個(gè)表中唯一。

@參數(shù)primary_key:
django默認(rèn)生成主鍵id:
id = models.AutoField(primary_key=True)

@參數(shù)verbose_name
django自動創(chuàng)建字段名稱 verbose_name

自定義:
first_name = models.CharField(verbose_name=“person’s first name”, max_length = 30)

默認(rèn)自動填寫:
first_name = models.CharField( max_length = 30)

其中,F(xiàn)oreignKey, ManyToManyField 和OneToOneField沒有該參數(shù)。而且,Django會自動將第一個(gè)字母大寫(哪怕是自定義的)。

3、關(guān)系

Django提供了定義三種最常見的數(shù)據(jù)庫關(guān)系類型的方法:多對一、多對多和一對一。

(1)多對一例子

class Manufacturer(models.Model):
    # ...
    pass

class Car(models.Model):
    manufacturer = models.ForeignKey(Manufacturer, on_delete=models.CASCADE)

(2)多對多例子

class Topping(models.Model):
    # ...
    pass

class Pizza(models.Model):
    # ...
    toppings = models.ManyToManyField(Topping)

(3)一對一例子

class Place(models.Model):
    name = models.CharField(max_length=50)
    address = models.CharField(max_length=80)

    def __str__(self):
        return "%s the place" % self.name

class Restaurant(models.Model):
    place = models.OneToOneField(
        Place,
        on_delete=models.CASCADE,
        primary_key=True,
    )
    serves_hot_dogs = models.BooleanField(default=False)
    serves_pizza = models.BooleanField(default=False)

    def __str__(self):
        return "%s the restaurant" % self.place.name

class Waiter(models.Model):
    restaurant = models.ForeignKey(Restaurant, on_delete=models.CASCADE)
    name = models.CharField(max_length=50)

    def __str__(self):
        return "%s the waiter at %s" % (self.name, self.restaurant)

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風(fēng)險(xiǎn)等級 參考價(jià)格 更多信息
ASE-25.000MHZ-L-C-T 1 Abracon Corporation CMOS Output Clock Oscillator, 25MHz Nom, ROHS COMPLIANT, SMD, 4 PIN

ECAD模型

下載ECAD模型
$1.46 查看
CM315D32768EZFT 1 Citizen Finedevice Co Ltd Parallel - Fundamental Quartz Crystal, 0.032768MHz Nom, SMD, 2 PIN

ECAD模型

下載ECAD模型
暫無數(shù)據(jù) 查看
NC7WZU04P6X 1 Rochester Electronics LLC LVC/LCX/Z SERIES, DUAL 1-INPUT INVERT GATE, PDSO6, 1.25 MM, EIAJ, SC-88, SC-70, 6 PIN
$0.22 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜