Django 4.x的版本只支持MySQL8及以上的版本了。如果mysql版本比较老,需要使用老版本的django。此处指定django版本为3.2.20
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django==3.2.20
创建项目
在指定目录使用命令行创建项目 django01
django-admin startproject django01
创建app
在项目内manage.py的同级目录使用命令行创建 app01
python manage.py startapp app01
注册app
查看 app01 --> apps.py
from django.apps import AppConfig
class App01Config(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'app01'
在 django01 --> settings.py 的INSTALLED_APPS中注册app,增加app01
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01.apps.App01Config' # 对应app01的路径
]
编写url和视图函数的映射关系(路由)
在django01 --> urls.py 中新增path,对应到app01 views.py的路径
from django.contrib import admin
from django.urls import path
from app01 import views
urlpatterns = [
# path('admin/', admin.site.urls),
path('index/', views.index),
]
在 app01 --> views.py中创建函数 index
from django.http import HttpResponse
from django.shortcuts import render
# Create your views here.
def index(request):
return HttpResponse("HelloWorld")
启动项目
方法一:命令行启动
python manage.py runserver
方法二:pycharm启动
web访问测试 http://localhost:8000/index/
安装mysqlclient
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple mysqlclient
连接数据库
在django01 --> settings.py 中配置
# Database
# https://docs.djangoproject.com/en/4.2/ref/settings/#databases
# DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': BASE_DIR / 'db.sqlite3',
# }
# }
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 数据库引擎
'NAME': 'gotest', # 库名
'USER': 'root',
'PASSWORD': 'uGS7jx9sYU7nt0c',
'HOST': '192.168.7.228',
'PORT': 3306,
}
}
操作表
创建表
在app01 --> models.py 中创建类 UserInfo (建表的时候表名为app01_userinfo, 会自动添加主键id)
from django.db import models
class UserInfo(models.Model):
name = models.CharField(max_length=32)
password = models.CharField(max_length=64)
age = models.IntegerField()
在 manage.py 同级目录执行命令建表
python manage.py makemigrations
python manage.py migrate
修改表
删除列:将对象内的字段注释或者删掉,然后执行建表命令
新增列:由于已存在的列中可能有数据,所以新增列必须执行对应的数据。然后再执行建表命令
# 列默认值为2
data1 = models.IntegerField(default=2)
# 默认值为空
data2 = models.IntegerField(null=True, blank=True)
CURD
form app01 import models
# 新增
models.UserInfo.objects.create(name="小赵", password="123", age=20)
models.UserInfo.objects.create(name="小钱", password="123", age=20)
models.UserInfo.objects.create(name="小孙", password="123", age=20)
# 删除
models.UserInfo.objects.filter(id=3).delete()
# 查询
# 查所有
# data_list 是QuerySet类型
data_list = models.UserInfo.objects.all()
for obj in data_list:
print(f"{obj.name}, {obj.password}, {obj.age}")
# 查一行
obj = models.UserInfo.objects.filter(id=1).first()
print(obj.id)
# 改
models.UserInfo.objects.filter(id=1).update(password="999")
外键
使用django自动创建表时,如果是外键,在对象中需要做特殊处理
"""
1. to 表示与哪张表关联
2. to_field 表示关联的字段
3. 返回参数是depart,创建表时,外键字段会定义为depart_id
4. 需要配置on_delete属性:当另一张表被删除时,对应有两种处理(级联删除、置空)
"""
# 级联删除
depart = models.ForeignKey(to="Department", to_fields="id", on_delete=models.CASCADE)
# 置空
# depart = models.ForeignKey(to="Department", to_fields="id", null=True, blank=True, on_delete=models.SET_NULL)
choices约束
"""
1. verbose_name: 字段的备注
2. SmallIntegerField: 对应数据表的tinyint
3. 配置choices后,数据表存储的值是1 和 2
"""
gender_choices = (
(1, "男"),
(2, "女"),
)
gennder = models.SmallIntegerField(verbose_name="性别", choices=gender_choices)