失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python3数据库表关联_Django中数据库操作|python3教程|python入门|python教程

python3数据库表关联_Django中数据库操作|python3教程|python入门|python教程

时间:2018-12-21 13:01:24

相关推荐

python3数据库表关联_Django中数据库操作|python3教程|python入门|python教程

/eschool/pythonxin3721/

一、数据库中时间类型

1.三种时间类型:DateTimeField、DataField、TimeField三种类型;在使用之前需先导入import django.utils.timezone包

2.该三种类型分别对应这Datetime、Data、Time三种对象;

3.时间类型,三个属性,auto_now_add、auto_now、default;这三种不能同时存在;auto_now_add在数据生成时,填入当前时间;

auto_now在数据时更新时,时间更新;default=timezone.now默认当前时间;

BOOK

id

title

price

publisher(ForeignKey)

Publisher

id

name

addr

Author

id

name

sex

birthday

book(m2m)

author_book

id

author_id

book_id

二、字段参数

1.字段参数:

null:表示字段是否可以为空;

unique:表示字段是否唯一;

db_index:给字段设置索引;

default:给字段设置默认值;

2.时间字段独有的参数

auto_now_add:生成数据时生成数据;

auto_now:每次更新数据时更新数据;

3.关系字段参数

to:要关联的表

to_field:要设置关联的字段,一般不用设置,默认情况下为关联另一张表里面的主键;

related_name:代替反向操作的 '表名_set'

反向操作时,

例如:未设置该参数情况下,Publisher.objects.get(id=1).book_set.all()

设置了related_name='stu'(BOOK表里面);Publisher.objects.get(id=1).stu.all()

related_query_name:对反向操作的queryset时,用来'表名_set'指定里面的'表名'

db_constraint:取消外键约束,默认为开启约束True;2.0版本以后需要显示的声明;

on_delete:对级联操作的一些设定:(针对ForgineKey/onetoone特有),db_constraint=False;

models.CASCADE:删除关联数据,与之相关联的数据也一并删除;

models.NOTHING:删除关联数据,引发IntegrityError;

models.PROTECT:删除关联数据,报错ProtectedError;

models.SET_NULL:删除关联数据, 与之关联的数据改为null;×为测通 报改变表结构

models.SET_DEFAULT:删除关联数据, 与之关联数据改为默认值(前提外键设置默认值);

models.SET:删除关联数据,

a. 与之关联的值设置为指定值,设置:models.SET(值)

b. 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)

4.manytomany关系

manytomany表的关系维护是通过第三张表author_book来维护的;

manytomany关系涉及三张表:author表、book表、author_book表;

三张表的关系建立(主要针对第三张表author_book)三种形式:(第三张表怎么创建[手动/自动],关联关系怎么创建[手动/自动])

方法一:Manytomany正常指定;

方法二:自己指定第三张表,通过ForeginKey来指定;自动创建关联关系

class Book(models.Model):

title = models.CharField(max_length=32, verbose_name="书名")

class Author(models.Model):

name = models.CharField(max_length=32, verbose_name="作者姓名")

# 自己创建第三张表,分别通过外键关联书和作者

class Author2Book(models.Model):

author = models.ForeignKey(to="Author")

book = models.ForeignKey(to="Book")

class Meta:

unique_together = ("author", "book")

方法三:自己指定第三张表,并通过 manytomany指定关联:手动创建关联关系;

class Book(models.Model):

title = models.CharField(max_length=32, verbose_name="书名")

#自己创建第三张表,并通过ManyToManyField指定关联

class Author(models.Model):

name = models.CharField(max_length=32, verbose_name="作者姓名")

books = models.ManyToManyField(to="Book", through="Author2Book", through_fields=("author", "book"))

# through_fields接受一个2元组('field1','field2'):

#其中field1是定义ManyToManyField的模型外键的名(author),field2是关联目标模型(book)的外键名。

class Author2Book(models.Model):

author = models.ForeignKey(to="Author")

book = models.ForeignKey(to="Book")

class Meta:

unique_together = ("author", "book")

如果觉得《python3数据库表关联_Django中数据库操作|python3教程|python入门|python教程》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。