【一】配置数据库
【1】默认数据库#
- 在settings.py文件中的DATABASES字典就是用来配置数据库的
- 默认的数据库是django自带的数据库是sqlite3
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
【2】修改数据库为mysql#
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': "",
"USER": "",
"PASSWORD": "",
"HOST": "localhost",
"PORT": 3306,
"CHARSET": "utf8mb4",
}
}
【3】解决修改数据库报错问题#
- 通常我们会修改为其他的数据库
- 因为sqlite3并不好用
- 如果修改完数据库之后不做任何其他的操作,启动项目时会发现报错
解决方法1 猴子补丁#
- 在项目下的
__init__
或者任意的应用名下的 __init__
文件中书写一下代码
import pymysql
pymysql.install_as_MySQLdb()
解决方法2 安装第三方模块#
pip install mysqlclient
【二】ORM介绍#
【1】什么是ORM#
- ORM是一种将对象与关系型数据库之间的映射的技术,主要实现了以下三个方面的功能:
- 数据库中的表映射为Python中的类
- 数据库中的字段映射为Python中的属性
- 数据库中的记录映射为Python中的实例
- ORM的主要优点是可以减少开发人员编写重复的SQL语句的时间和工作量,并且可以减少由于SQL语句的调整和更改所带来的错误。
【2】Django ORM的优点#
- 与其他ORM框架相比,Django ORM拥有以下优点:
- 简单易用:Django ORM的API非常简单,易于掌握和使用。
- 丰富的API:Django ORM提供了丰富的API来完成常见的数据库操作,如增删改查等,同时也支持高级查询和聚合查询等操作。
- 具有良好的扩展性:Django ORM可以与其他第三方库进行无缝集成,如Django REST framework、Django-Oscar等。
- 自动映射:Django ORM支持自动映射,开发者只需要定义数据库表的结构,就可以自动生成相应的Python类,从而减少开发过程中的重复代码量。
【三】ORM操作之表操作
【1】定义模型表#
from django.db import models
class User(models.Model):
username = models.CharField(max_length=20)
password = models.CharField(max_length=20)
【2】生成迁移文件#
python manage.py makemigrations
【3】同步到数据库#
python manage.py migrate
【四】ORM建表常用字段和参数
【1】常用字段#
int自增列,必须填入参数 primary_key=True。当model中如果没有自增列,则自动会创建一个列名为id的列
一个整数类型,范围在 -2147483648 to 2147483647。(一般不用它来存手机号(位数也不够),直接用字符串存,)
字符类型,必须提供max_length参数, max_length表示字符长度。
日期字段,日期格式 YYYY-MM-DD,相当于Python中的datetime.date()实例。
日期时间字段,格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ],相当于Python中的datetime.datetime()实例。
【2】字段参数#
null=True 表示某个字段可以为空
如果设置为unique=True 则该字段在此表中必须是唯一的 。
如果db_index=True 则代表着为此字段设置索引。
为该字段设置默认值。
设置要关联的表
设置要关联的表的字段
级联删除
【五】ORM操作之数据操作
User.objects.create(username=username)
User.objects.all()
User.objects.filter(username=username)
模型表名.objects.exclude(筛选字段名=筛选字段值)
模型表名.objects.filter(筛选字段名=筛选字段值).update(修改字段名=修改字段值)
obj = 模型表名.objects.get(筛选字段名=筛选字段值)
obj.修改字段名=修改字段值
obj.save()
模型表名.objects.filter(筛选字段名=筛选字段值).delete()
instance_to_delete = MyModel.objects.get(筛选字段名=筛选字段值)
instance_to_delete.delete()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!