django之ORM详解(全)

字段 - 类型

  • models.AutoField()   自增列=int(11),如果没有的话,默认会生成一个名称为id的列,如果要显示的定义一个自增列,必须把该列设置为主键(primary_key=True)

  • models.IntegerField()   整形(-2147483648, 2147483647)

  • models.BigIntegerField()  长整形(-9223372036854775808, 9223372036854775807)

  • models.PositiveIntegerField()  正Integer (0, 2147483647)

  • models.PositiveSmallIntegerField()正smallInteger (0, 32767)

  • models.SmallIntegerField()   短整型 (-32768, 32767)

  • models.Decimal()   十进制小数类型=decimal 必须指定max_digits(总位数)和decimal_places(小数位)

  • models.FloatField()   浮点类型=double

  • models.CharField()   字符串类型字段 必须加max_length参数

    • models.ComaSeparatedIntegerField()用逗号分割的数字类型=varchar 继承CharField,所以必须加max_lenght参数
    • models.EmailField()   字符串类型(正则表达式邮箱)=varchar 对字符串进行正则表达式验证
    • models.IPAddressField()   字符串类型(ip4正则表达式)
    • models.GenericIPAddressField()  字符串类型(ip4和ip6是可选的) 参数protocol可以是:both、ipv4、ipv6 验证时,会根据设置进行报错
    • models.SlugField()   减号、下划线、字母、数字
    • models.URLField()   字符串类型,地址正则表达式
    • models.BinaryField()  二进制
    • models.ImageField() 图片 upload_to=’’ 指定上传图片的路径
    • models.FilePathField() 文件 upload_to=’’ 指定上传图片的路径
  • models.TextField   字符串=longtext

  • models.BooleanField()  布尔类型字段=tinyint(1) 不能为空blank=True

  • models.NullBooleanField()   允许为空的布尔类型

  • models.DateField()   日期字段类型date 参数auto_now=True表示每次更新都会更新这个时间;参数auto_now_add表示只是第一次创建时添加,之后的更新不再改变

  • models.DateTimeField()   日期字段类型datetime 同DateField的参数

  • models.TimeField()   时间 HH:MM[:ss[.uuuuuu]]

字段 - 选项:

  • null=布尔值: 与数据库相关,字段是否允许为空,默认False

  • blank=布尔值: 与表单验证相关,表单是否允许为空,默认False

  • defalut=值或对象: 字段默认值,

  • primary_key=布尔值: 是否主键,默认False

  • unique=布尔值: 是否唯一,默认False

  • verbose_name=文本: 字段描述/form中的label值,也可以放到第一个参数models.CharField(“person’s first name”, max_length=30)

  • db_column 数据库中字段的列名(db_column=“test”)

  • db_index 设置索引,默认False

  • editable 是否可编辑,默认为True

  • help_text 表单帮助信息

  • choices form中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作, 可通过get_字段_display() 访问字段的显示值
    gf = models.IntegerField(choices=[(0, '何穗'),(1, '大表姐'),],default=1)

  • error_messages 自定义错误信息(字典类型),字典健:null, blank, invalid, invalid_choice, unique, and unique_for_date 如:{'null': "不能为空.", 'invalid': '格式错误'}

  • validators 自定义错误验证(列表类型),从而定制想要的验证规则

from django.core.validators import RegexValidator
from django.core.validators import EmailValidator,URLValidator,DecimalValidator,\
MaxLengthValidator,MinLengthValidator,MaxValueValidator,MinValueValidator

test = models.CharField(
	max_length=32,
	error_messages={
   
		'c1': '优先错信息1',
		'c2': '优先错信息2',
		'c3': '优先错信息3',
	},
	validators=[
		RegexValidator(regex='root_\d+', message='错误了', code='c1'),
		RegexValidator(regex='root_112233\d+', message='又错误了', code='c2'),
		EmailValidator(message='又错误了', code='c3'), ]
)
  • max_length: [字符串型] 必须指定数值的参数,utf8编码的最大长度

  • unique_for_date: [时间日期类型] 日期必须唯一

  • unique_for_month: [时间日期类型] 月必须唯一

  • unique_for_year: [时间日期类型] 年必须唯一

  • auto_now: [时间日期类型] 更新当前时间

  • auto_now_add: [时间日期类型] 创建时更新当前时间

  • max_digits: [浮点型] DecimalField字段必须指定,一共多少位

  • decimal_places: [浮点型] DecimalField字段必须指定,小数点位数

blank主要用在CharField, TextField 这两个字符型字段可用字符串来存储空值

null主要用在IntegerField,DateField,DateTimeField 这几个字段不接受空字符串,所以在使用时,必须将blank和null同时赋值True

元数据Meta

class Meta:
	db_table = "addressinfo"    		# 表的名称
	ordering = 'pid'                    # 排序字段
	verbose_name = "省市县地址信息"
	verbose_name_plural = verbose_name  # 复数
	unique_together = ("address", "note")  # 联合唯一健,还可以用二维元组 ((), ())
	app_label = 'app_name'  			# 模型类属于哪一个应用
	# db_tablespace       				# 定义数据库表空间的名称
	# abstract = True   				# 基类用于继承,默认为False

表关系

示例:

from django.db import models

class School(models.Model):
    ''' 学院 '''
    id = models.AutoField(primary_key=True)
    name = models
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django框架的ORM(Object-Relational Mapping)是一种将对象模型与关系数据库模型进行映射的技术。其目的是让开发者使用面向对象的方式来操作数据库,而不必直接使用SQL语句。 DjangoORM实现了以下功能: 1. 定义模型:使用Django定义模型的方式非常简单,只需要创建一个继承自`django.db.models.Model`的类,并定义它的属性即可。 2. 数据库迁移:当你修改了模型之后,Django会自动帮你生成数据库迁移文件,这些文件可以在数据库中创建或修改表结构。 3. 数据库查询:使用Django ORM可以进行复杂的数据库查询,包括过滤、排序、分组等操作。 4. 数据库操作:Django ORM提供了对数据库的增删改查操作,可以方便地完成对数据的操作。 下面是一个使用Django ORM的例子: ```python from django.db import models class Author(models.Model): name = models.CharField(max_length=50) email = models.EmailField() class Book(models.Model): title = models.CharField(max_length=100) author = models.ForeignKey(Author, on_delete=models.CASCADE) published_date = models.DateField() ``` 在上面的例子中,我们定义了两个模型:`Author`和`Book`。`Author`模型有`name`和`email`两个属性,`Book`模型有`title`、`author`和`published_date`三个属性。其中,`author`属性是一个外键,它与`Author`模型建立了关联关系。 通过Django ORM,我们可以进行如下操作: 1. 创建模型表结构 ```python python manage.py makemigrations python manage.py migrate ``` 2. 添加数据 ```python author1 = Author(name='John', email='john@example.com') author1.save() book1 = Book(title='Django for Beginners', author=author1, published_date='2020-01-01') book1.save() ``` 3. 查询数据 ```python # 获取所有的作者 authors = Author.objects.all() # 获取所有的书籍 books = Book.objects.all() # 获取指定作者的所有书籍 author = Author.objects.get(name='John') books = Book.objects.filter(author=author) # 按照发布日期倒序排序 books = Book.objects.order_by('-published_date') ``` 4. 修改数据 ```python book = Book.objects.get(title='Django for Beginners') book.title = 'Django for Experts' book.save() ``` 5. 删除数据 ```python book = Book.objects.get(title='Django for Experts') book.delete() author = Author.objects.get(name='John') author.delete() ``` 总之,Django ORM可以让我们更加方便地操作数据库,提高开发效率。同时,它也具有良好的可扩展性和可维护性,可以应对各种复杂的场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值