Django数据库设置


创建库

 create database djangoProject1 charset utf8mb4;

安装MySQLClient

pipenv install  mysqlclient

修改settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME':'djangoProject1' ,  # 本项目的数据库
        'USER':'root',                      # MySQL的用户名
        'PASSWORD':'root123'      # MySQL的密码
    }
}

数据迁移

# 通过模型类创建迁移脚本
python  manage.py  makemigrations   
# app01/migrations 自动生成迁移脚本 [字段名,数据类型和约束条件]

# 应用迁移脚本1.生成SQL语句 2.将生成好的SQL语句发送给MySQL执行。
python  manage.py  migratie

创建表

create  table userinfo(
    username   varchar(30)  not null,
    password   varchar(30) not null
)

Models ORM

Python SQL
属性
模型类型对象 类型
ORM内置数据操作方法 增删改查的语句
模型对象 一行数据
# 在 app01/models.py中添加以下代码
class UserInfo(models.Model):
    SEX_CHOICES = (
        ('1', '男'),
        ('2', '女'),
        ('3', '保密')
    )
    username = models.CharField(max_length=30, verbose_name='用户名')
    password = models.CharField(max_length=30, verbose_name='密码')
    sex = models.CharField(max_length=1, choices=SEX_CHOICES, verbose_name='性别')

    class Meta:
        verbose_name = '用户信息表'
        verbose_name_plural = verbose_name
# 在项目目录下的终端中执行
python  manage.py  makemigrations   
python .\manage.py  sqlmigrate  app01  0001
# 完成数据迁移
python  manage.py  migrate
# 反向迁移,将数据库中的表反向转化为模型类
python manage.py inspectdb > app01/models.py

使用models进行简单的增删改查

# 使用ipython进行对django Models进行操作

pipenv  install ipython

# 启动django shell 

python manage.py  shell 

Python 3.9.7 (default, Sep 16 2021, 16:59:28) [MSC v.1916 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 8.0.0 -- An enhanced Interactive Python. Type '?' for help.
# 简单测试时,可以在终端中对数据进行操作

#  引用当前项目下的模型类
In [1]: from app01.models import UserInfo

# 使用模型类创建模型对象
In [2]: user1 = UserInfo(username="张三", password="123456", sex="男")

# 模型对象存储前,对象的显示为None
In [3]: user1
Out[3]: <UserInfo: UserInfo object (None)>

# 使用save() 将模型对象映射为数据库中的一行数据。等价于SQL中的insert语句
In [4]: user1.save()

# 模型对象存储后,空模型对象显示id
In [5]: user1
Out[5]: <UserInfo: UserInfo object (1)>

# 模型对象.属性 获取对象列的值 
In [6]: user1.username
Out[6]: '张三'

In [7]: user1.sex
Out[7]: '男'

In [8]: user1.password
Out[8]: '123456'

# 修改字段的数据    
In [9]: user1.password = "admin1234"

In [10]: user1.password
Out[10]: 'admin1234'

# 将修改更新到数据库中
In [11]: user1.save()

# 通过模型对象删除一行数据
In [12]: user1.delete()
Out[12]: (1, {'app01.UserInfo': 1})

In [13]: user2 = UserInfo(username="李四", password="123456", sex="男")

In [14]: user2.save()

In [15]: user3 = UserInfo(username="王二", password="123456", sex="男")

In [16]: user3.save()

# 获取表中所有数据    
In [17]: user_all = UserInfo.objects.all()

# 返回查询集
In [18]: user_all
Out[18]: <QuerySet [<UserInfo: UserInfo object (2)>, <UserInfo: UserInfo object (3)>]>

# 可以循环获取查询集中的数据    
In [19]: for row in user_all:
    ...:     print(row.username, row.sex, row.password)
李四  123456
王二  123456

# 获取一行的数据
In [20]: user2 = UserInfo.objects.get(id=2)

In [21]: user2
Out[21]: <UserInfo: UserInfo object (2)>

In [22]: user2.username
Out[22]: '李四'

In [23]: user2.username = "李小四"

In [24]: user2.save()

In [26]: user_all[0]
Out[26]: <UserInfo: UserInfo object (2)>

In [27]: user_all[0].username
Out[27]: '李四'

In [28]: user_all = UserInfo.objects.all()

In [29]: user_all[0].username
Out[29]: '李小四'

In [30]: user_all[1].username
Out[30]: '王二'

In [34]: user3 = UserInfo.objects.get(id=3)

In [35]: user3.username
Out[35]: '王二'

In [36]: user3.username = "wanger"

In [37]: user3.save()

使用Views查询数据

# app01/views.py
from django.http import JsonResponse, Http404
from app01.models import UserInfo


def index(request):
    pk = request.GET.get('id')
    if pk:
        try:
            user = UserInfo.objects.get(pk=pk)
        except Exception as e:
            raise Http404()
        return JsonResponse({"username": user.username, "sex": user.sex})
    else:
        user_all = UserInfo.objects.all()
        users = {
            "code": 200,
            "data": [{"id": row.id, "username": row.username, "sex": row.sex} for row in user_all]
        }
    return JsonResponse(users)

通过ulrs.py进行Web请求处理

# djangoProject1/urls.py

from app01.views import index

urlpatterns = [
    path('admin/', admin.site.urls),
    # 实行Url的访问路径,当该路径被访问时,会执行index函数
    path('api/user', index)
]

image-20220119173349089

image-20220119173421456