Django--基础知识点--models创建数据表

奚才良
2023-12-01

1 在models.py中编写表

例如:

from django.db import models
from django.contrib.auth.models import AbstractUser


class UserInfo(AbstractUser):
    """
    用户信息
    """
    nid = models.AutoField(primary_key=True)
    telephone = models.CharField(max_length=11, null=True, unique=True)
    avatar = models.FileField(upload_to='avatars/', default='/avatars/default.png')  # 上传文件
    create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)

    blog = models.OneToOneField(to='Blog', to_field='nid', null=True, on_delete=models.CASCADE)

    def __str__(self):
        return self.username


class Blog(models.Model):
    """
    博客信息表(站点表)
    """
    nid = models.AutoField(primary_key=True)
    title = models.CharField(verbose_name='个人博客标题', max_length=64)
    site_name = models.CharField(verbose_name='站点名称', max_length=64)
    theme = models.CharField(verbose_name='博客主题', max_length=32)

    def __str__(self):
        return self.title

2 修改setting.py文件

2.1 修改默认数据库

DATABASES = {
    # 'default': {
    #     'ENGINE': 'django.db.backends.sqlite3',
    #     'NAME': BASE_DIR / 'db.sqlite3',
    # }
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'cnblog',
        'USER': 'root',
        'PASSWORD': '******',
        'HOST': 'xxxxxxxxxx',
        'PORT': xxxx   # 端口号是数值,不是字符串
    }
}

2.2

若在models.py中某个类继承了AbstractUser类,需要在settings.py中添加一行代码如下:

AUTH_USER_MODEL = "blog.UserInfo"

3 将MySQLdb API 修改为PyMySQL API

MySQLdb只支持到python2,不支持python3

做如下修改,在与settings.py相同目录的__init__.py文件中加入以下代码

import pymysql

pymysql.install_as_MySQLdb()

4 创建数据库

在命令行下进入mysql,使用以下命令创建数据库

# cnblog为数据库名
mysql > create cnblog 

5 创建表

进入项目目录执行以下命令

# 生成一个数据库迁移记录的文件,保存在migrations目录下
python manage.py makemigrations
# 将真正提交到数据库执行
python manage.py migration

补充:

# 展示迁移的sql语句
python manage.py sqlmigrate app01 0001_xx  
# 项目的迁移及其状态
python manage.py showmigrations 
 类似资料: