一、表与表之间的对应关系(两张表)
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() 数出查询结果有几个