Django学习笔记----数据库操作实例

上上篇>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进行数据库基本操作

我们通过Djangoshell工具来演示对数据库的基本操作, 在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]
上一篇:比特币私钥、公钥、钱包地址之间的关系


下一篇:Consul Config 使用Git做版本控制的实现