Django中的models函数ORM ⼀、数据库的配置
1、sqlite数据库
django默认⽀持
2、mysql数据库的配置
⾸先安装pymysql库
⾸先在django项⽬的settings.py⽂件中将默认的配置注释掉
# DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# }
# }
然后将mysql设置为django的默认数据库
DATABASES = {
'default': {
'ENGINE': 'django.sql',
'NAME': 'dj', # 你的数据库名称
'USER': 'root', # 你的数据库⽤户名
'PASSWORD': '123456', # 你的数据库密码
'HOST': '', # 你的数据库主机,留空默认为localhost
'PORT': '3306', # 你的数据库端⼝
}
}
View Code
在然后在项⽬的__init__().py⽂件内添加代码
import pymysql
pymysql.install_as_MySQLdb()
3、创建表
在models.py⽂件中
eg:创建⼀张表
class Book(models.Model):
name = models.CharField(max_length=25)
price = models.IntegerField
在命令⾏窗⼝依次执⾏
python manage.py makemigrations
python manage.py migrate
结果成功创建blog_book表,表名默认为app名_类名|
+----------------------------+
| blog_book |
+----------------------------+
⼆、向表中添加数据(增)
eg:
ef index(request):
hod == 'POST':
ate(name=request.POST['name'], price=request.POST['price'])
return redirect('dat')
else:
return render(request, 'index.html')
三、修改表中数据(改)
django项目实例a、⽤filter,filter返回的是⼀个queryset集合,这个集合有⼀个update⽅法
eg:将bbu这本书的名字改为俄罗斯⽅块从⼊门到精通
Book.objects.filter(name='bbu').update(name='俄罗斯⽅块从⼊门到精通')
b、⽤get,get返回的是⼀个model对象,没有update⽅法
eg:将python这本书的价格增加到120
pri = (name='python')
pri.price = 120
pri.save()
四、删除表中数据(删)
调⽤filter返回的queryset对象的delete⽅法
eg:将python这本书删除
Book.objects.filter(name='python').delete()
五、查(单表)
1、查询API:all()⽅法
返回包含数据库中所有对象的queryset
eg:查询所有书籍
def data(request):
datas = Book.objects.all()
return render(request, 'data.html', locals())
html⽂件
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% for data in datas %}
<p>书名:{{ data.name }} 价格:{{ data.price }}</p>
<p></p>
{% endfor %}
</body>
</html>
View Code
结果
书名:俄罗斯⽅块从⼊门到精通价格:123.0
书名:我的世界价格:88.0
书名:俄罗斯⽅块从⼊门到精通价格:22.0
书名:我们的青春价格:220.0
书名:三⽑流浪记价格:55.0
书名:三⽑流浪记2 价格:45.0
书名:⼩兵张嘎价格:21.0
View Code
2、filter(**kwargs)⽅法
返回⼀个包含对象的集合,满⾜参数中的条件
eg:查询⼩兵张嘎这本书的价格
def data(request):
datas = Book.objects.filter(name='⼩兵张嘎')
return render(request, 'data.html', locals())
结果
书名:⼩兵张嘎价格:21.0
3、exclude(**kwargs)⽅法
返回⼀个包含对象的集合,不满⾜参数中的条件
eg:查询所有书籍,除了⼩兵张嘎
def data(request):
datas = lude(name='⼩兵张嘎')
return render(request, 'data.html', locals())
结果
书名:俄罗斯⽅块从⼊门到精通价格:123.0
书名:我的世界价格:88.0
书名:俄罗斯⽅块从⼊门到精通价格:22.0
书名:我们的青春价格:220.0
书名:三⽑流浪记价格:55.0
书名:三⽑流浪记2 价格:45.0
View Code
4、get(**kwargs)⽅法、first()⽅法:返回第⼀组数据、last()⽅法:返回最后⼀组数据返回⼀个model对象,不可遍历,符合筛选条件的对象超过⼀个或者没有均会报错
5、values(**kwargs)⽅法
返回⼀个特殊的queryset对象,⼀个可迭代的字典对象,作⽤:将表中的固定字段拿出eg:查询所有书的名字
def data(request):
datas = Book.objects.all().values('name')
return render(request, 'data.html', locals())
结果
书名:俄罗斯⽅块从⼊门到精通
书名:我的世界
书名:俄罗斯⽅块从⼊门到精通
书名:我们的青春
书名:三⽑流浪记
书名:三⽑流浪记2
书名:⼩兵张嘎
View Code
6、values_list():返回的是⼀个元组序列
7、distinct():将数据去重
eg:将书名相同的书籍去重
def data(request):
datas = Book.objects.all().values('name').distinct()
return render(request, 'data.html', locals())
结果
书名:俄罗斯⽅块从⼊门到精通:
书名:我的世界
书名:我们的青春
书名:三⽑流浪记
书名:三⽑流浪记2
书名:⼩兵张嘎
View Code
8、count():计数
eg:统计有多少本书
def data(request):
datas = Book.objects.all().values('name')
num_book = Book.objects.all().count()
return render(request, 'data.html', locals())
结果
书名:俄罗斯⽅块从⼊门到精通
书名:我的世界
书名:俄罗斯⽅块从⼊门到精通:
书名:我们的青春
书名:三⽑流浪记
书名:三⽑流浪记2
书名:⼩兵张嘎
共有7本书
View Code
9、模糊查询
eg:查询书名为“三⽑”开头的书籍信息
def data(request):
datas = Book.objects.filter(name__contains='三⽑')
return render(request, 'data.html', locals())
结果
书名:三⽑流浪记价格:55.0
书名:三⽑流浪记2 价格:45.0
10、链式过滤
所谓链式过滤就是在queryset的基础上再次进⾏过滤
相当于将⼀条sql语句的结果当作另⼀条sql语句的条件
eg:查询价格为22元的俄罗斯⽅块(⽤链式过滤的⽅法)
def data(request):
datas = Book.objects.filter(name='俄罗斯⽅块从⼊门到精通').filter(price=22) return render(request, 'data.html', locals())
结果
书名:俄罗斯⽅块从⼊门到精通价格:22.0
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论