Django-10-从模板创建数据表以及sqlite3自带数据库示例

文章目录

概述

要真正有意义的展示出数据,不能仅仅从静态页面获取信息,而是需要跟后端的数据库进行交互,例如从url拿到一个检索关键词,通过post/get请求从后端数据库检索到相应的信息后,再通过前端渲染展示出来。当然这仅仅是一个非常简单而常见的要求,总的来说数据库的增删查改都是以后需要用到的。
Django自带数据库sqlite3,可以直接使用,以此为例来展示上述过程,其他的数据库例如MySQL可以据此修改相应设置即可。

初始化sqlite3

Django在创建项目的时候自动创建一个 db.sqlite3的数据库文件,可以在vscode通过sqliteviewer插件查看,可以看到是空表

Django-10-从模板创建数据表以及sqlite3自带数据库示例
  • 初始化数据库
python.exe .\manage.py migrate

Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial… OK
Applying auth.0001_initial… OK
Applying admin.0001_initial… OK
Applying admin.0002_logentry_remove_auto_add… OK
Applying admin.0003_logentry_add_action_flag_choices… OK
Applying contenttypes.0002_remove_content_type_name… OK
Applying auth.0002_alter_permission_name_max_length… OK
Applying auth.0003_alter_user_email_max_length… OK
Applying auth.0004_alter_user_username_opts… OK
Applying auth.0005_alter_user_last_login_null… OK
Applying auth.0006_require_contenttypes_0002… OK
Applying auth.0007_alter_validators_add_error_messages… OK
Applying auth.0008_alter_user_username_max_length… OK
Applying auth.0009_alter_user_last_name_max_length… OK
Applying auth.0010_alter_group_name_max_length… OK
Applying auth.0011_update_proxy_permissions… OK
Applying sessions.0001_initial… OK

再次查看,已经生成了相应的初始化表了

Django-10-从模板创建数据表以及sqlite3自带数据库示例

真正创建一个数据库表

Django中创建一个数据库非常简单,只需要通过 django.db.models.Model生成相应的类即可,这个类即是一个表,类的属性即对应着表格的字段,类的方法则对应着表格的增删查改。以往不得不通过底层数据库的sql语句变成直接面向对象(ORM,object realated model)的属性和方法定义,即可直接操作整个表。好处在于,无需考虑不同数据库语法,在改变其他数据库类型的时候只需要改一些配置,无需更改代码。整体步骤:

  • 1.创建相应的app
  • 2.在app中的models.py中定义数据表的类
  • 3.在settings.py的INSTALL_APPS中添加该应用的数据库类配置名称
  • 4.执行 python manage.py makemigrations app以及 python manage.py migrate app同步数据库
  • 语法:
from django.db import models
class 模型类名(models.Model):
    字段名 = models.字段类型(字段选项)

定义一个类其实就是一个数据表,每个类的objective就是一个数据行
models.py:

from django.db import models

class Students(models.Model):
    name = models.CharField(max_length=100, null=True)
    age = models.IntegerField(null=True)
    sex = models.CharField(max_length=10, null=True)
    height = models.FloatField(max_length=10, null=True)
    weight = models.FloatField(null=True, blank=True)

settings.py:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'students.apps.StudentsConfig',
]

students app-apps.py是自动生成的,只需要将 StudentsConfig类添加到上面的设置文件中即可

from django.apps import AppConfig

class StudentsConfig(AppConfig):
    name = 'students'

在执行上述两条迁移命令后,刷新数据库,可以看到,已经添加了一个名为 students_students的表(改名称是students app名加上models中的类名组成)

Django-10-从模板创建数据表以及sqlite3自带数据库示例
  • 常用字段选项
    verbose_name:表头名称,每个字段最终在网页显示的表头名称
    primary_key:如果指定为Ture则该字段为主键,不在创建id
    blank:如果为True则允许该字段为空,不需要一定填写
    default:给予默认值,例如default=8
    以及其他选项(可查阅django文档)
    例如,创建一个字符串字段,要求长度限制30,不能为空,必须唯一,必须有索引
name = CharField(max_length=30, null=False, unique=True, db_index=True)

登记自定义表格,便于后台显示管理

  • 创建一个系统管理账户
    依次输入用户名、邮箱(可用来找回密码)以及密码
 python.exe .\manage.py createsuperuser
Username (leave blank to use 'yut'):
Email address: 123@qq.com
Password:
Password (again):
This password is too common.

This password is entirely numeric.

Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.

Django-10-从模板创建数据表以及sqlite3自带数据库示例
我们可以看到对应的数据库表格新增了1个记录,包括用户名、密码等信息。我们可以通过默认的 admin路由登录
Django-10-从模板创建数据表以及sqlite3自带数据库示例

我们可以看到,之前创建的StudentsDB表并未出现在admin页面,如何添加呢?只需要登记一下即可。在students app的admin.py中

from django.contrib import admin

from .models import StudentsDB

admin.site.register(StudentsDB)

然后刷新管理页面,即可看到新增的表

Django-10-从模板创建数据表以及sqlite3自带数据库示例
点击该表,可以看到目前为空
Django-10-从模板创建数据表以及sqlite3自带数据库示例
Django-10-从模板创建数据表以及sqlite3自带数据库示例
  • 前面定义好的字段如果 blank = True则该字段可以为空比用填,否则该字段必须有值
    Django-10-从模板创建数据表以及sqlite3自带数据库示例

字段类型及注意

类型注意BooleanField布尔型,True/FalseCharField字符串,必须设置max_lengthIntegerField整型FloatField浮点型DateField日期,参数3个,只能选一个,auto_now = True:每次保存对象时使用当前日期;auto_now_add = True:创建该对象日期;default:设置当前时间,例如’2022-02-02’DateTimeField同上,但是更加精确到秒DecimalField2个必须参数,可以生成010.00格式的数字,max_digits:总位数,包括小数后的位数;decimal_places :小数点后的位数EmailField邮箱类型,包括@等符号检查ImageField保存图片存储路径TextField不定长文本

更改数据表名称

由于django默认是应用+类来命名数据表的,可以通过 Meta类来更改
student.views.py

from django.models import models
class student(model.Model):
    name = CharField(max_length=10)
    class Meta:
        db_table = 'Stuents'

常见问题及解决

  • 1.执行 python manage.py makemigrations时出现 some field without default,原因在于新增字段时,原有数据不知道该如何赋值
    解决方法:选择2)在model.py中给字段添加一个选项 default=xxx
  • 2.数据库迁移混乱
    解决方法:删除migrations目录下所有 0000?xxx.py(__init__.py除外),再执行迁移数据库命令

参考

达内教育

Original: https://blog.csdn.net/qq_42491125/article/details/123950775
Author: Neptuneyut
Title: Django-10-从模板创建数据表以及sqlite3自带数据库示例

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/815294/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球