django之Model理解,简单的增删改查

一、表与表之间的对应关系(两张表)

1、一对多
2、多对多
3、一对一

二、ORM (object relation mapping) 对象关系映射表

1、每一个python类对应一个数据库表。
2、一个类的实例就是表的一条记录,表的一行。
3、ORM使操作数据库变得简单易行,而且完全不用考虑sql语句,避免新手写sql语句带来的性能的问题。快速开发,由此而来。

三、操作步骤

1、设置数据库(默认sqlite3数据库)

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

2、在app下面的 models.py 写类

class Users(models.Model):
    account = models.CharField(max_length=30)
    password = models.CharField(max_length=20)
    nickname = models.CharField(max_length=20)
    headimg = models.CharField(max_length=100)
    sex = models.CharField(max_length=2)
    city = models.CharField(max_length=20)
    personsign = models.CharField(max_length=50)
    
  	def __str__(self):
   		 return self.nickname

注:如果没有设置主键,则自动设置一个主键。

3、运行命令,创建数据库表

python manage.py makemigrations

python manage.py migrate

扫描二维码关注公众号,回复: 3327785 查看本文章

4、表记录的添加

  • 方式一
u = Users(account=account,password=password1,
nickname=nickname,sex=sex,city=city,personsign=personsign)
u.save()
  • 方式二
    Users.object.create()

5、表记录的修改

  • 方式一(建议用)
Users.objects.filter(account='shi').update(password='123')      
  • 方式二(效率低,会给每一个属性重新赋值)
u = Users.objects.get(account='shi')       #get  没有update方发 
u.personsign='哈哈哈'         
u.save()

6、表记录的删除

Users.objects.filter(account='shi').delete

7、表记录的查询

  • 查询可迭代的记录
user_list = Users.objects.all()    #user_list  是一个QuerySet列表,可以进行切片
user_list = Users.objects.all() [:3]    #前3条   
user_list = Users.objects.all() [::2]   #2是步长 
user_list = Users.objects.all() [::-1]   #倒着显示
user_list = Users.objects.filter(id=2)  #仍然是可迭代的对象,只包含一个   
  • 查询单个记录
user = Users.objects.get(id=2)  #一般get用主键查,因为get只去一条记录,取多条或零条都会报错。
  • 查询一个或多个字段,不要一个对象
#查询所有男生的昵称和账号,得到一个QuerySet列表,里面是字典
ret = Users.objects.filter(sex='男').values('nickname','account')   
#查询所有男生的昵称和账号,得到一个QuerySet列表,里面是元组
ret = Users.objects.filter(sex='男').values——list('nickname','account')   
  • 反查询(exclude)
#查询所有男生的昵称和账号,得到一个QuerySet列表,里面是字典
ret = Users.objects.exclude(sex='男').values('nickname','account')   
  • order_by() 对查询结果排序
  • reverse() 对查询结果反向排序
  • distinct() 对查询结果去除
  • count() 数出查询结果有几个

猜你喜欢

转载自blog.csdn.net/weixin_43173892/article/details/82814824