加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

Django操作mysql数据库(二)

07/01 15:24
803
阅读需 10 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

模型文档地址

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

实践是检验真理的唯一标准

上一篇文档,我们把这个模型的流程,通过pycharm走通了,那么,我们现在就可以根据官方文档,码代码了。

1、ORM设计思想

即Object-Relationl Mapping,它的作用是在关系型数据库和对象之间作一个映射,可以认为,django通过models将python语言翻译成了数据库执行语句 。

例如,下面的代码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的内置字段不能实现这个功能,也可以很容易地编写自己的字段。

字段类型: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)字段的参数定义(这里截取上一个文档的例子):

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

在这里插入图片描述

如上,对于字段有一些通用参数:

@参数 null:
为True,将空值存储为NULL,否则不存储

@参数blank:
为True,允许输入空值;为False,则必填

@参数choices:
YEAR_IN_SCHOOL_CHOICES = [
(‘FR’, ‘Freshman’),
(‘SO’, ‘Sophomore’),
(‘JR’, ‘Junior’),
(‘SR’, ‘Senior’),
(‘GR’, ‘Graduate’),
]

用于页面上的选择框标签,models提供一个二维的二元元组,第一个元素表示存在数据库内真实的值,第二个表示页面上显示的具体内容。

@参数default:
字段的默认值。它可以是值或可调用对象。

@参数help_text:
把鼠标放到页面部件上,会显示

@参数primary_key:
如果为True,自定义该字段为模型的主键,属性为只读。 django会自动添加一个IntegerField来保存主键,即id:

id = models.AutoField(primary_key=True)

@参数unique:
如果为真,则该字段必须在整个表中唯一。

@参数primary_key:
django默认生成主键id:
id = models.AutoField(primary_key=True)

@参数verbose_name
django自动创建字段名称 verbose_name

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

默认自动填写:
first_name = models.CharField( max_length = 30)

其中,ForeignKey, ManyToManyField 和OneToOneField没有该参数。而且,Django会自动将第一个字母大写(哪怕是自定义的)。

3、关系

Django提供了定义三种最常见的数据库关系类型的方法:多对一、多对多和一对一。

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

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
3294-15SURC/S400-A6 1 Everlight Electronics Co Ltd Single Color LED, Brilliant Red, Water Clear, T-1, 3mm, ROHS COMPLIANT PACKAGE-2
暂无数据 查看
DSC1001CI5-019.2000 1 Microchip Technology Inc OSCILLATOR MEMS 19.2MHZ CMOS SMD
$1.74 查看
CSTCC10M0G53-R0 1 Murata Manufacturing Co Ltd Ceramic Resonator, 10MHz Nom, CERAMIC PACKAGE-3
$0.96 查看

相关推荐

电子产业图谱