创建库
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)
]