上上篇>Django学习笔记----环境搭建基于Windows
上一篇>Django学习笔记----快速入门
修改settings.py配置
在环境搭建篇, 我们已经安装了mysql-client包
安装好后, 在settings.py
中将代码做如下替换
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'mydatabase',
}
}
DATABASES = {
'default': {
# 数据库引擎名称
'ENGINE': 'django.db.backends.mysql',
'USER': 'root',
'PASSWORD':'123456',
# 数据库名称
'NAME':'test',
# 数据库主机地址, 此外还可以设置端口
'HOST':'localhost'
}
}
在App中建立模型
在app中的models.py
中建立模型类
如注释所示, 在Cmder中,依次使用python manage.py migrate
创建表结构python manage.py makemigrations App_name
让Django在数据库中建立对应的表
class Mysite(models.Model):
# use 'python manage.py migrate' create table Structure
# use 'python manage.py makemigrations App_name(Not class name)'
# let Django konw what had been changed
title = models.CharField(max_length=100)
url = models.URLField()
author = models.CharField(max_length=50)
num = models.IntegerField()
之后查看数据库, 可以看到已经建立好的表.
这里面的表不仅有刚刚建立的模型, 还有Django自己建立的表. 模型建立的表的命名格式是AppName_ModelName
通过Django进行数据库基本操作
我们通过Django
的shell
工具来演示对数据库的基本操作, 在Cmder中键入以下命令启动shell
python manage.py shell
启动后导入你建立的模型的包, 如from myTest.models import *
获取所有数据
# 相当于SELECT * FROM TABLE
In [2]: m = Mysite.objects.all()
In [3]: m
Out[3]: <QuerySet []>
增加一条数据
In [4]: m = Mysite(title='django', num=2)
In [5]: m.save()
在前面获取数据时, 表是空的, 经过增加数据之后, 我们再查询一次
In [6]: m = Mysite.objects.all()
In [7]: m
Out[7]: <QuerySet [<Mysite: Mysite object>]>
我们将该数据取出来
In [8]: m[0].title
Out[8]: 'django'
查询数据
查询不同字段只需更换get()的字段名
# 获取单条
In [9]: m = Mysite.objects.get(num=2)
In [10]: m.title
Out[10]: 'django'
# 也可以使用Filter, 相当于SQL语句中的Where
m = Mysite.objects.filter(title='django')
修改数据
查询出来的数据可以进行更改, 选中对应的字段进行赋值并保存即可
In [25]: m.title = 'flask'
In [26]: m.save()
In [27]: m.title
Out[27]: 'flask'
也可以直接使用Update函数进行修改
# 修改单条
Mysite.objects.filter(num=2).update(title='Google')
# 修改整列
Mysite.objects.all.update(title='Google')
删除数据
删除数据同样简单, 删除成功后再次查询该记录就会报错. 删除数据同样可以使用前面查询数据的filter
方法和all
方法来实现对查询的多条结果进行删除
In [28]: m.delete()
Out[28]: (1, {'myTest.Mysite': 1})
In [29]: m = Mysite.objects.get(num=2)
---------------------------------------------------------------------------
DoesNotExist Traceback (most recent call last)
<ipython-input-29-96b21651e5d5> in <module>()
----> 1 m = Mysite.objects.get(num=2)
对查询结果进行排序
# 升序排列
Mysite.objects.all().order_by("num")
# 降序排列
Mysite.objects.all().order_by("-num")
也可以在模型中设置排序
class Mysite(models.Model):
......
class Meta:
ordering = ['num']
显示数据
在查询结果中, 我们得到的是一个列表, 可以使用Python的列表的方法进行遍历, 相信大家都会的
既然结果是列表, 那么可以用切片来限制返回的结果也是在意料之内的
Mysite.objects.all()[0:2]