Django3 ORM插入普通数据
pub_obj = Publish.objects.create(city="温州",email="2401339050@qq.com",name="江南皮革厂")
ORM插入一对多数据
# 查找指定对象
pub_obj = Publish.objects.filter(nid=1).first()
# 方式一:引用对象做参数
book_obj = Book.objects.create(title="xxx",price=100,publishDate="2012-12-12",pubish=pub_obj)
# 方式二:引用ID做参数
book_obj = Book.objects.create(title="红楼梦",price=100,publishDate="2012-12-12",pubish_id=1)
ORM多对多插入
# 多对多插入
book_obj = Book.objects.create(title='x',publishDate="2012-12-12",price=100,pubish_id=1)
w1 = Author.objects.get(name="路人甲")
w2 = Author.objects.get(name="路人乙")
book_obj.authors.add(w1,w2) # 插入方式一
book_obj.authors.add(1,2,3) # 插入方式二
book_obj.authors.add(*[1,2]) # 插入方式三
ORM移除多对多数据
book=Book.objects.filter(nid=16).first()
book.authors.remove(1) # 删除方式一
book.authors.remove(*[1,2]) # 删除方式二
book.authors.clear() # 全部删除
ORM多对多简单查询
# 查询主键为16的书籍所有作者
book=Book.objects.filter(nid=16).first()
print(book.authors.all()) # 返回值:对象列表
相关ORM建表代码:
from django.db import models
from django.contrib.auth.models import User,AbstractUser
# Create your models here.
class AuthorDetail(models.Model):
nid = models.AutoField(primary_key=True)
birthday = models.DateTimeField()
telephone = models.BigIntegerField()
address=models.CharField(max_length=64)
class Author(models.Model):
nid = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
age = models.IntegerField()
authordetail = models.OneToOneField(to="AuthorDetail",to_field="nid",on_delete=models.CASCADE,null=True)
class Publish(models.Model):
nid = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
city = models.CharField(max_length=32)
email = models.EmailField()
class Book(models.Model):
nid = models.AutoField(primary_key=True)
title = models.CharField(max_length=32)
publishDate = models.DateField()
price = models.DecimalField(max_digits=5,decimal_places=2)
pubish = models.ForeignKey(to="Publish",to_field='nid',on_delete=models.CASCADE,null=True) # 一对多
authors = models.ManyToManyField(to="Author",null=True) # 多对多
小白,望指点