[Django ]Django 的数据库操作
Django 的数据库操作
有之前的基础,那么我们就可以开始对数据库进行操作。
一、数据库配置
配置 MySql
在主目录的 settings.py
中修改
Python
|
|
数据库驱动
'django.db.backends.sqlite3'
:SQLite嵌入式数据库。'django.db.backends.postgresql'
:BSD许可证下发行的开源关系型数据库产品。'django.db.backends.mysql'
:转手多次目前属于甲骨文公司的经济高效的数据库产品。'django.db.backends.oracle'
:甲骨文公司的关系型数据库旗舰产品。
如果你没有安装数据库依赖还需要:
Bash
|
|
然后在项目目录的__init__.py
:中对数据库驱动初始化。
从而避免Django找不到连接MySQL的客户端工具而询问你:“Did you install mysqlclient? ”
Python
|
|
创建模型构建数据表
创建一个app应用
Bash
1
(venv)$ python manage.py startapp user
将应用注册到项目中去
Python
1 2 3 4 5 6 7 8 9 10
# 在项目目录中的 settings.py INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','user', ]
注册路由跳转
Python
1 2 3 4 5 6 7 8
# 项目目录中的 urls.py from django.contrib import admin from django.urls import path, includeurlpatterns = [path('admin/', admin.site.urls),path('', include('user.urls')), ]
构建数据模型
Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
# 应用目录的 models.py from django.db import modelsclass User(models.Model):"""用户类"""no = models.IntegerField(primary_key=True, db_column='no', verbose_name='编号')name = models.IntegerField(db_column='name', verbose_name='名字')gender = models.CharField(max_length=20, db_column='gender', verbose_name='性别')age = models.CharField(max_length=20, db_column='age', verbose_name='年龄')address = models.CharField(max_length=20, db_column='address', verbose_name='籍贯')qq = models.IntegerField(db_column='qq', verbose_name='QQ')email = models.CharField(max_length=20, db_column='email', verbose_name='邮箱')class Meta:db_table = 'user'class Admin(models.Model):"""管理员"""no = models.IntegerField(primary_key=True, db_column='no', verbose_name='编号')username = models.CharField(max_length=20, db_column='username', verbose_name='用户名')password = models.CharField(max_length=20, db_column='password', verbose_name='密码')class Meta:db_table = 'manager'
生成数据表
Bash
1 2 3 4 5 6
# 迁移 Django 内置的管理数据表 (venv)$ python manage.py migrate # 生成我们的数据迁移文件 (venv)$ python manage.py makemigrations user # 迁移我们的数据表 (venv)$ python manage.py migrate
可以看出除了最后两张表,上面都是Django为我们默认配置的数据表
二、登录 Django 的后台管理系统
Django框架有自带的后台管理系统来实现对模型的管理。虽然实际应用中,这个后台可能并不能满足我们的需求,但是在学习Django框架时,我们暂时可以利用Django自带的后台管理系统来管理我们的模型,同时也可以了解一个项目的后台管理系统到底需要哪些功能。
注册一个超级管理员账号
Bash
|
|
然后我们启动 Django
Bash
|
|
访问 http://127.0.0.1:8000/admin
输入刚刚注册的账号密码就可以用 Django 提供的图形界面来操作我们的数据库了
这里会记录我们对数据库的所有操作
三、模型定义参考
字段
对字段名称的限制
字段名不能是Python的保留字,否则会导致语法错误
字段名不能有多个连续下划线,否则影响ORM查询操作
Django模型字段类
字段类 | 说明 |
---|---|
AutoField | 自增ID字段 |
BigIntegerField | 64位有符号整数 |
BinaryField | 存储二进制数据的字段,对应Python的bytes类型 |
BooleanField | 存储True或False |
CharField | 长度较小的字符串 |
DateField | 存储日期,有auto_now和auto_now_add属性 |
DateTimeField | 存储日期和日期,两个附加属性同上 |
DecimalField | 存储固定精度小数,有max_digits(有效位数)和decimal_places(小数点后面)两个必要的参数 |
DurationField | 存储时间跨度 |
EmailField | 与CharField相同,可以用EmailValidator验证 |
FileField | 文件上传字段 |
FloatField | 存储浮点数 |
ImageField | 其他同FileFiled,要验证上传的是不是有效图像 |
IntegerField | 存储32位有符号整数。 |
GenericIPAddressField | 存储IPv4或IPv6地址 |
NullBooleanField | 存储True、False或null值 |
PositiveIntegerField | 存储无符号整数(只能存储正数) |
SlugField | 存储slug(简短标注) |
SmallIntegerField | 存储16位有符号整数 |
TextField | 存储数据量较大的文本 |
TimeField | 存储时间 |
URLField | 存储URL的CharField |
UUIDField | 存储全局唯一标识符 |
字段属性
通用字段属性
选项 | 说明 |
---|---|
null | 数据库中对应的字段是否允许为NULL,默认为False |
blank | 后台模型管理验证数据时,是否允许为NULL,默认为False |
choices | 设定字段的选项,各元组中的第一个值是设置在模型上的值,第二值是人类可读的值 |
db_column | 字段对应到数据库表中的列名,未指定时直接使用字段的名称 |
db_index | 设置为True时将在该字段创建索引 |
db_tablespace | 为有索引的字段设置使用的表空间,默认为DEFAULT_INDEX_TABLESPACE |
default | 字段的默认值 |
editable | 字段在后台模型管理或ModelForm中是否显示,默认为True |
error_messages | 设定字段抛出异常时的默认消息的字典,其中的键包括null、blank、invalid、invalid_choice、unique和unique_for_date |
help_text | 表单小组件旁边显示的额外的帮助文本。 |
primary_key | 将字段指定为模型的主键,未指定时会自动添加AutoField用于主键,只读。 |
unique | 设置为True时,表中字段的值必须是唯一的 |
verbose_name | 字段在后台模型管理显示的名称,未指定时使用字段的名称 |
ForeignKey属性
limit_choices_to:值是一个Q对象或返回一个Q对象,用于限制后台显示哪些对象。
related_name:用于获取关联对象的关联管理器对象(反向查询),如果不允许反向,该属性应该被设置为
'+'
,或者以'+'
结尾。to_field:指定关联的字段,默认关联对象的主键字段。
db_constraint:是否为外键创建约束,默认值为True。
on_delete:外键关联的对象被删除时对应的动作,可取的值包括django.db.models中定义的:
- CASCADE:级联删除。
- PROTECT:抛出ProtectedError异常,阻止删除引用的对象。
- SET_NULL:把外键设置为null,当null属性被设置为True时才能这么做。
- SET_DEFAULT:把外键设置为默认值,提供了默认值才能这么做。
ManyToManyField属性
symmetrical:是否建立对称的多对多关系。
through:指定维持多对多关系的中间表的Django模型。
throughfields:定义了中间模型时可以指定建立多对多关系的字段。
db_table:指定维持多对多关系的中间表的表名。
模型元数据选项
选项 | 说明 |
---|---|
abstract | 设置为True时模型是抽象父类 |
app_label | 如果定义模型的应用不在INSTALLED_APPS中可以用该属性指定 |
db_table | 模型使用的数据表名称 |
db_tablespace | 模型使用的数据表空间 |
default_related_name | 关联对象回指这个模型时默认使用的名称,默认为_set |
get_latest_by | 模型中可排序字段的名称。 |
managed | 设置为True时,Django在迁移中创建数据表并在执行flush管理命令时把表移除 |
order_with_respect_to | 标记对象为可排序的 |
ordering | 对象的默认排序 |
permissions | 创建对象时写入权限表的额外权限 |
default_permissions |
默认为('add', 'change', 'delete')
|
unique_together | 设定组合在一起时必须独一无二的字段名 |
index_together | 设定一起建立索引的多个字段名 |
verbose_name | 为对象设定人类可读的名称 |
verbose_name_plural | 设定对象的复数名称 |
查询参考
按字段查找可以用的条件:
- exact / iexact:精确匹配/忽略大小写的精确匹配查询
- contains / icontains / startswith / istartswith / endswith / iendswith:基于
like
的模糊查询 - in:集合运算
- gt / gte / lt / lte:大于/大于等于/小于/小于等于关系运算
- range:指定范围查询(SQL中的
between…and…
) - year / month / day / week_day / hour / minute / second:查询时间日期
- isnull:查询空值(True)或非空值(False)
- search:基于全文索引的全文检索
- regex / iregex:基于正则表达式的模糊匹配查询
四、静态页面映射
我们将我们的实现准备好的 html 文件反正根目录的 templates 文件夹里面,再创建一个 static 文件夹来存放我们的 js、css、font之类的资源文件。最后配置我们的资源映射
Bash
|
|
在 html 中引入资源文件
Html
|
|
五、基本增删改查语句
Python
|
|
下面是 Django框架的一些基本查询 API 整理
Yml
|
|
文章作者: 丁生
文章链接: http://fabian4.gitee.io/55582.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 丁生的个人博客!
[Django ]Django 的数据库操作相关推荐
- 关于Django中的数据库操作API之distinct去重的一个误传
django提供的数据库操作API中的distinct()函数,了解SQL语句的读者都应该知道,DISTINCT关键字可以在select操作时去重.django里的这个distinct()函数也是这个 ...
- Django模型之数据库操作-查询
六.数据库操作-查询 6.1基础条件查询 1 基本查询 get查询单一结果,如果不存在会抛出模型类.DoesNotExist异常. all查询多个结果.[返回的所有结果是列表] count查询结果数量 ...
- Django模型和数据库操作
文本参考菜鸟教程,创建模型和数据库,并对mysql数据库进行操作. 1.创建数据库 在mysql命令行,输入创建数据库语句. create database runoob default charse ...
- Django框架之数据库操作
文章目录 一.前言 二.数据库配置 三.数据表创建 1.单表创建 2.关联表创建 四.ORM增删改查 1.新增数据(C) (1)创建单表数据 (2)创建从表数据 2.读取数据(R) (1)读取多条数据 ...
- Django框架——模型(数据库操作)
-- models.py -- ORM(object-relation mapping) 实现数据模型与数据库的解耦: # 对象,关系,映射: 1.根 据对象的类型生成表结构: 2.将对象.列表的操作 ...
- Django连接mysql数据库操作
Y12 1.创建工程 django-admin startproject django_3 2.创建app python manage.py startapp app1 3.Mysql数据库配置 ( ...
- Django框架——ORM数据库操作
目录 一.增加 二.删除 三.修改 四.查询 1.基本查询 2.过滤查询 3.过滤条件语法 4.F对象和Q对象 5.聚合函数 6.排序函数 7.关联查询 测试数据:BookInfo表 PeopleIn ...
- Django项目实践3 - Django模型(字段、数据库操作及模型继承)
http://blog.csdn.net/pipisorry/article/details/45725953 Django数据库字段类型(Field types) AutoField class A ...
- Django与数据库操作
Django与数据库操作 数据库连接的方法 web 框架 django --- 自己内部实现 (ORM) + pymysql(连接)Flask,tornado ---pymysqlSQLArchemy ...
- Django从理论到实战(part25)--数据库操作
学习笔记,仅供参考 参考自:Django打造大型企业官网–Huang Y: 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列 ...
最新文章
- mysql 分区_搞懂MySQL分区
- Webpack 4 学习09(打包生成html)
- 绝学:用宏定义找BUG,了解一下?
- java开发学不会_JAVA学不会,快期末了,怎么办?
- python数据分析知识整理_Python基础知识点总结:数据分析从0到大师必Mark的一篇!(上)...
- 【从零开始】Python字符串的操作方法
- [NewLife.XCode]反向工程(自动建表建库大杀器)
- hadoop3 禁用ec_Hadoop + Amazon EC2 –更新的教程
- pyplot 余弦函数_python如何画出三角函数
- python图像边缘检测_使用python获取图像中形状的轮廓(x,y)坐标
- SAP License:ABC作业成本法-平行记帐
- 我是个初二学生,想考一中,现在该怎么努力?
- 纪念贴:历史会证明今天是不是开创新历史的一天
- (转载)vmware workstation14永久激活密钥分享
- 252个常见英语单词词根
- Java中通过js简单的调用高拍仪和扫描仪
- 解决python运行selenium程序执行完后,Chrome浏览器自动关闭的问题
- [转]音乐天堂 Music Heaven Vol.1 ~ Vol.36 的目录
- python练习项目八——下载所有XKCD 漫画
- LawBreaker: An Approach for Specifying Traffic Laws and Fuzzing Autonomous Vehicles (ASE2022)
热门文章
- 概率论:概率空间的基本概念
- java ready()_Java BufferedReader ready()用法及代码示例
- 计算机mac地址怎么修改密码,如何修改苹果电脑mac地址?
- FPGA实现DDRIP核配置(Memory Interface Solutions)
- Mac安装软件时各种异常情况的解决方法
- android打印动画,Android实用View系列------TextView实现打印机效果
- 关于Win10已设置默认打开方式的清除方法
- 实践致知第7享:Windows如何设置文件的默认打开方式?
- android录音笔记软件,录音笔记app
- 教父三部曲观后感总结