Django 学习第六天——Django模型基础第一节
一、Django 的 ORM 简介:
Django的ORM系统的分析:

1、ORM 概念:对象关系映射(Object Relational Mapping,简称ORM)
2、ORM的优势:不用直接编写SQL代码,只需像操作对象一样从数据库操作数据;
django 模型映射关系:

1、模型类必须写在 app 下的 models.py 文件里;
2、模型如果需要映射到数据库,所在的 app 必须被注册(在主目录的 settings.py 文件中的 INSTALLED_APPS 中添加该 app 名);
3、一个数据表对应一个模型类,表中的字段,对应模型中的类属性;
二、数据库连接配置:
数据库配置:
在主目录的 settings.py 中配置 DATABASES:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 数据库引擎
'NAME': 'mydb', #数据库名称
'USER': 'user', # 链接数据库的用户名
'PASSWORD': 'password', # 链接数据库的密码
'HOST': '127.0.0.1', # mysql服务器的域名ip地址
'PORT': '', # mysql的一个端口号,默认是3306
}
}
设置时区:再主目录中的 settings.py 中设置 TIME_ZONE = 'Asia/ShangHai' # 北京时间
创建一个管理员用户taka账号,密码为 taka:
CREATE USER 'taka'@'%'IDENTIFIED BY 'taka';
给这个用户授予所有远程访问,这个用户主要用于管理整个数据库,备份,还原等操作。
GRANT ALL ON *.* TO 'taka'@'%';
使授权立即生效:
FLUSH PRIVILEGES;
pymysql 数据库链接器的配置:
安装:pip install pymysql
在主目录下的 __init__.py 文件添加:
import pymysql pymysql.install_as_MySQLdb()
三、模型的创建与映射:
使用 django 中的模型:
每一个模型都是django.db.models.Model 的子类
在 app 下面的 models.py 中创建 django 的模型类:

注:这个 __str__ 方法的作用是我们在查询是看到的东西
常用的模型字段:
IntegerField : 整型,映射到数据库中的int类型。
SmallIntegerField : 小整形
CharField: 字符类型,映射到数据库中的varchar类型,必须通过max_length指定最大长度。
TextField: 文本类型,映射到数据库中的text类型。
BooleanField: 布尔类型,映射到数据库中的tinyint类型,在使用的时候,传递
True/False进去。如果要可以为空,则用NullBooleanField。
DateField: 日期类型,没有时间。映射到数据库中是date类型,在使用的时候,可
以设置- - DateField.auto_now每次保存对象时,自动设置该字段为当前时间。设置
DateField.auto_now_add当对象第一次被创建时自动设置当前时间。
DateTimeField: 日期时间类型。映射到数据库中的是datetime类型,在使用的时候,传
递datetime.datetime()进去
字段常用的参数:
primary_key: 指定是否为主键。
auto_increment:自增长
unique: 指定是否唯一。
null: 指定是否为空,默认为False。
blank: 等于True时form表单验证时可以为空,默认为False。
default: 设置默认值。
verbose_name:备注;也可以直接写在第一位不用加参数
DateTimeField(DateField)—— auto_now=True:
每次修改都会将当前时间更新进去,只有调用,QuerySet.update方法将不会调用。这个参数只是Date和DateTime以及TimModel.save()方法才会调用e类才有的。
DateTimeField(DateField)—— auto_now_add=True:
第一次添加进去,都会将当前时间设置进去。以后修改,不会修改这个值。
将模型类映射到数据库:
在执行命令前,保证创建模型的 app 是已经注册过的 app;
1、首先执行以下命令,会创建映射文件:
python manage.py makemigrations
该命令后面可以跟 app 名称,表示指定对某个 app 的模型进行映射,没写所有的 app 都执行。
python manage.py sqlmigrate app_name 0001 # app_name时app的名字,0001 是映射文件的前缀
执行该命令可以看到执行的 sql 原生语句
2、再执行以下命令,将映射文件中的映射数据提交到数据库中
python manage.py migrate
该命令后面可以跟 app 名称,表示指定对某个 app 的模型进行迁移,没写所有的 app 都执行。
将模型类映射到数据库:
打开数据我们能看到创建的以 app 名 _模型名的数据表,而其他的一些表格是 django 自动生成的;
注意:如果要删除表,那么可以去 django 模型中注释掉模型类,然后执行映射的命令,不要手动再命令行里面去删除;
四、数据的 增-删-改-查:
调试工具:在根目录执行:
先安装ipython:pip install ipython
python manage.py shell
再视图函数中导入 创建的 模型类,然后使用下面的方法实现增,删,改,查操作数据;
增:

查:

注:通过print可以在后台看到我们访问到的数据,并且输出方式就是模型中的__str__的格式.
all() 和 filter() 方法返回的是 QuerySet 对象;
get() 方式返回的单个对象,如果符合条件的对象有多个,则 get 报错!
改:

删:

Django 学习第六天——Django模型基础第一节的更多相关文章
- 六、Django模型基础第一节
1 数据库的连接配置 django 连接mysql的配置流程: 安装 pymysql pip install pymysql 创建数据库用户 '; grant all on *.* to 'xiang ...
- Django学习系列之Form基础
Django学习系列之Form基础 2015-05-15 07:14:57 标签:form django 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追 ...
- Django学习之django自带的contentType表 GenericRelation GenericForeignKey
Django学习之django自带的contentType表 通过django的contentType表来搞定一个表里面有多个外键的简单处理: 摘自:https://blog.csdn.net/a ...
- day 94 Django学习之django自带的contentType表
Django学习之django自带的contentType表 通过django的contentType表来搞定一个表里面有多个外键的简单处理: 摘自:https://blog.csdn.net/a ...
- day 93 Django学习之django自带的contentType表
Django学习之django自带的contentType表 通过django的contentType表来搞定一个表里面有多个外键的简单处理: 摘自:https://blog.csdn.net/a ...
- Django学习之django自带的contentType表
Django学习之django自带的contentType表 通过django的contentType表来搞定一个表里面有多个外键的简单处理: 摘自:https://blog.csdn.net/aar ...
- day 91 Django学习之django自带的contentType表
Django学习之django自带的contentType表 通过django的contentType表来搞定一个表里面有多个外键的简单处理: 摘自:https://blog.csdn.net ...
- Django学习---Web框架及基础知识
Django学习---Web框架 web框架的本质 我们在学socket,我们创建一个socketserver,然后运行起来,有一个client客户端要连接socket服务端,连接上之后,如果两边都没 ...
- django学习-10.django连接mysql数据库和创建数据表
1.django模型 Django对各种数据库提供了很好的支持,包括:PostgreSQL.MySQL.SQLite.Oracle. Django为这些数据库提供了统一的调用API. 我们可以根据自己 ...
随机推荐
- LeetCode(102):二叉树的层次遍历
Medium! 题目描述: 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 ...
- 爬虫----beautifulsoup的简单使用
beautifulSoup使用: 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据. pip3 install beautifulsoup4 解析器 Beau ...
- bzoj 2301
一道莫比乌斯反演入门题. 首先观察题目要求:的数对数 首先可以发现,这个东西同时有上界和下界,所以并不是很容易计算 那么我们变下形,可以看到:原式= 是不是清晰很多了?(当然没有!) 不,这一步很重要 ...
- SCSS 使用@each 方法循环遍历数组颜色并给li赋值
$list-bg:red,orange,blue,skyblue; ul{ >li{ height: 30px; @each $c in $list-bg{ $i:index($list-bg, ...
- 饮冰三年-人工智能-linux-07 硬盘分区、格式化及文件系统的管理
先给虚拟机添加一个硬盘 通过fdisk -l sdb,查看磁盘内容 通过fdisk /sdb 来操作分区 创建一个新分区 创建第二个分区 创建第三个分区 创建扩展分区 再次创建分区,其实使用的是扩展分 ...
- web页在微信中访问增加遮罩层 右上角弹出在浏览器中打开
https://blog.csdn.net/zgsdzczh/article/details/79744838 web页在微信中访问增加遮罩层 右上角弹出在浏览器中打开 <style typ ...
- 应用程序池--IIS最大工作进程数
IIS 6.0允许将应用程序池配置成一个Web园(Web Garden).要理解Web园的概念,可以设想这样一种情形:假设有一个IIS 5.0服务器和三个Web网站,每一个Web网站运行着相同的应用程 ...
- 移动端:div在手机页面上随意拖动
<!doctype html> <html> <head> <title>弹窗</title> <meta charset=" ...
- lojround3
A.绯色 IOI(开端) 首先注意到是完全图,数据范围又很大,肯定要观察一些性质 我们化简一下式子 发现其实是要求simga(xixj)最大 那么结论就很好想了 最大的和次大的第三大的连一起...然后 ...
- Crystal Reports报表使用 [一]
1.Crystal Reports 是什么? Crystal Reports 是一个功能强大.动态和可操作的报表解决方案,它将帮助你通过网络设计.开发.可视化及发布报表,或嵌入到企业应用之中.有了它, ...