• 正文
  • 推薦器件
  • 相關推薦
申請入駐 產業(yè)圖譜

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

2024/07/01
833
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

模型文檔地址

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

實踐是檢驗真理的唯一標準

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

1、ORM設計思想

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

例如,下面的代碼1和代碼2是等價的:

代碼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的模型使用

上一篇文檔中,我們在使用模型上遇到了一些坑,其中一個是要把應用進行注冊才能使用模型。這點在官方文檔也是說明了的:

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附帶了幾十個內置字段類型,可以在模型字段引用中找到完整的列表。如果Django的內置字段不能實現(xiàn)這個功能,也可以很容易地編寫自己的字段。

字段類型: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ù)定義(這里截取上一個文檔的例子):

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’),
]

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

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

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

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

id = models.AutoField(primary_key=True)

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

@參數(shù)primary_key:
django默認生成主鍵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)

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

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

3、關系

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

(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模型 風險等級 參考價格 更多信息
CY62177EV30LL-55ZXI 1 Cypress Semiconductor Standard SRAM, 2MX16, 55ns, CMOS, PDSO48, 12 X 18.40 MM, 1 MM HEIGHT, LEAD FREE, MO-142, TSOP1-48

ECAD模型

下載ECAD模型
$34.25 查看
MOC3021SR2M 1 Rochester Electronics LLC 1 CHANNEL TRIAC OUTPUT OPTOCOUPLER, SURFACE MOUNT, DIP-6
$0.68 查看
TLP185(GB-TPR,SE 1 Toshiba America Electronic Components 1 CHANNEL TRANSISTOR OUTPUT OPTOCOUPLER

ECAD模型

下載ECAD模型
$0.45 查看

相關推薦