Django 模型(数据库)-cmd下的操作
Django 模型是与数据库相关的,与数据库相关的代码一般写在 models.py 中,Django 支持 sqlite3, MySQL, PostgreSQL等数据库,只需要在settings.py中配置即可,不用更改models.py中的代码,丰富的API极大的方便了使用。
1. 新建项目和应用
- python manage.py startapp TestModel
# 新建一个项目
- (venv)...> python manage.py migrate # 创建表结构
- (venv)...> python manage.py makemigrations TestModel # 让 Django 知道我们在我们的模型有一些变更
- (venv)...> python manage.py migrate TestModel # 创建表结构
- 定义模型(models)->激活模型(setting)
HelloWorld/TestModel/models.py: 文件代码:
- # models.py
- from django.db import models
- class Test(models.Model):
- name = models.CharField(max_length=20)
- 文件目录:
- HelloWorld
- |-- HelloWorld
- |-- manage.py
- ...
- |-- TestModel
- | |-- __init__.py
- | |-- admin.py
- | |-- models.py
- | |-- tests.py
- | `-- views.py
2. 添加应用
将我们新建的应用(people)添加到 settings.py 中的 INSTALLED_APPS中,也就是告诉Django有这么一个应用。
- INSTALLED_APPS = [
- 'django.contrib.admin',
- 'django.contrib.auth',
- 'django.contrib.contenttypes',
- 'django.contrib.sessions',
- 'django.contrib.messages',
- 'django.contrib.staticfiles',
- 'TestModel',
- ]
3. 数据库操作(修改models.py)
接下来我们在 HelloWorld 目录中添加 testdb.py 文件(下面介绍),并修改 urls.py:
- HelloWorld/HelloWorld/urls.py: 文件代码:
- from django.urls import path
- from . import views,testdb
- urlpatterns = [
- path('runoob/', views.runoob),
- path('testdb/', testdb.testdb),
- ]
4、添加数据
- HelloWorld/HelloWorld/testdb.py: 文件代码:
# -*- coding: utf-8 -*-- from django.http import HttpResponse
- from TestModel.models import Test
- # 数据库操作
- def testdb(request):
- test1 = Test(name='runoob')
- test1.save()
- return HttpResponse("<p>数据添加成功!</p>")
5、获取数据
HelloWorld/HelloWorld/testdb.py: 文件代码:
- # -*- coding: utf-8 -*-
- from django.http import HttpResponse
- from TestModel.models import Test
- # 数据库操作
- def testdb(request):
- # 初始化
- response = ""
- response1 = ""
- # 通过objects这个模型管理器的all()获得所有数据行,相当于SQL中的SELECT * FROM
- list = Test.objects.all()
- # filter相当于SQL中的WHERE,可设置条件过滤结果
- response2 = Test.objects.filter(id=1)
- # 获取单个对象
- response3 = Test.objects.get(id=1)
- # 限制返回的数据 相当于 SQL 中的 OFFSET 0 LIMIT 2;
- Test.objects.order_by('name')[0:2]
- #数据排序
- Test.objects.order_by("id")
- # 上面的方法可以连锁使用
- Test.objects.filter(name="runoob").order_by("id")
- # 输出所有数据
- for var in list:
- response1 += var.name + " "
- response = response1
- return HttpResponse("<p>" + response + "</p>")
6、更新数据
- HelloWorld/HelloWorld/testdb.py: 文件代码:
- # -*- coding: utf-8 -*-
- from django.http import HttpResponse
- from TestModel.models import Test
- # 数据库操作
- def testdb(request):
- # 修改其中一个id=1的name字段,再save,相当于SQL中的UPDATE
- test1 = Test.objects.get(id=1)
- test1.name = 'Google'
- test1.save()
- # 另外一种方式
- #Test.objects.filter(id=1).update(name='Google')
- # 修改所有的列
- # Test.objects.all().update(name='Google')
- return HttpResponse("<p>修改成功</p>")
7、删除数据
- HelloWorld/HelloWorld/testdb.py: 文件代码:
- # -*- coding: utf-8 -*-
- from django.http import HttpResponse
- from TestModel.models import Test
- # 数据库操作
- def testdb(request):
- # 删除id=1的数据
- test1 = Test.objects.get(id=1)
- test1.delete()
- # 另外一种方式
- # Test.objects.filter(id=1).delete()
- # 删除所有数据
- # Test.objects.all().delete()
- return HttpResponse("<p>删除成功</p>")
新建一个对象的方法有以下几种:
Person.objects.create(name=name,age=age)
p = Person(name="WZ", age=23)
p.save()
p = Person(name="TWZ")
p.age = 23
p.save()
Person.objects.get_or_create(name="WZT", age=23)
这种方法是防止重复很好的方法,但是速度要相对慢些,返回一个元组,第一个为Person对象,第二个为True或False, 新建时返回的是True, 已经存在时返回False.
获取对象有以下方法:
Person.objects.all()
Person.objects.all()[:10] 切片操作,获取10个人,不支持负索引,切片可以节约内存
Person.objects.get(name=name)
get是用来获取一个对象的,如果需要获取满足条件的一些人,就要用到filter
Person.objects.filter(name="abc") # 等于Person.objects.filter(name__exact="abc") 名称严格等于 "abc" 的人
Person.objects.filter(name__iexact="abc") # 名称为 abc 但是不区分大小写,可以找到 ABC, Abc, aBC,这些都符合条件
Person.objects.filter(name__contains="abc") # 名称中包含 "abc"的人
Person.objects.filter(name__icontains="abc") #名称中包含 "abc",且abc不区分大小写
Person.objects.filter(name__regex="^abc") # 正则表达式查询
Person.objects.filter(name__iregex="^abc") # 正则表达式不区分大小写
filter是找出满足条件的,当然也有排除符合某条件的
Person.objects.exclude(name__contains="WZ") # 排除包含 WZ 的Person对象
Person.objects.filter(name__contains="abc").exclude(age=23) # 找出名称含有abc, 但是排除年龄是23岁的
常见报错信息
如果执行以上命令时会出现如下报错信息:
原因是 MySQLclient 目前只支持到 Python3.4,因此如果使用的更高版本的 python,需要修改如下:
通过报错信息的文件路径找到 ...site-packages\Django-2.0-py3.6.egg\django\db\backends\mysql 这个路径里的 base.py 文件,把这两行代码注释掉(代码在文件开头部分):
- if version < (1, 3, 13):
- raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
一般点报错的代码文件路径信息,会自动跳转到报错文件中行数,此时我们在报错的代码行数注释掉。
如果出现以下报错信息:
我们点报错的代码文件路径,跳转到报错文件中行数,此时我们在报错的代码行数之前加上:
- query = query.encode()
Django 模型(数据库)-cmd下的操作的更多相关文章
- {django模型层(二)多表操作}一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询、分组查询、F查询和Q查询
Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 xxx 七 ...
- Django模型层之单表操作
Django模型层之单表操作 一 .ORM简介 我们在使用Django框架开发web应用的过程中,不可避免地会涉及到数据的管理操作(如增.删.改.查),而一旦谈到数据的管理操作,就需要用到数据库管理软 ...
- day 70 Django基础五之django模型层(二)多表操作
Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 ORM ...
- day 69 Django基础五之django模型层(一)单表操作
Django基础五之django模型层(一)单表操作 本节目录 一 ORM简介 二 单表操作 三 章节作业 四 xxx 一 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现 ...
- day 56 Django基础五之django模型层(二)多表操作
Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 ORM ...
- day 55 Django基础五之django模型层(一)单表操作
Django基础五之django模型层(一)单表操作 本节目录 一 ORM简介 二 单表操作 三 章节作业 四 xxx 一 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它 ...
- Django模型-数据库操作
前言 前边记录的URLconf和Django模板全都是介绍页面展示的东西,也就是表现层的内容.由于Python先天具备简单而强大的数据库查询执行方法,Django 非常适合开发数据库驱动网站. 这篇开 ...
- django模型——数据库(二)
模型--数据库(二) 实验简介 模型的一些基本操作,save方法用于把对象写入到数据库,objects是模型的管理器,可以使用它的delete.filter.all.order_by和update等函 ...
- CMD下文件操作
CMD下常用文件操作指令 1.输入盘符 如C: 然后回车,相当于进了C盘(c盘一般进的是桌面目录) 2.输入 cd 目录名 然后回车(目录名是c盘中的一级目录名,也可为c盘中的目录路径).如cd mm ...
随机推荐
- 【收藏】关于元数据(Metadata)和元数据管理,这是我的见过最全的解读!
本文主要从元数据的定义.作用.元数据管理现状.管理标准和元数据管理功能等方面讲述了我对元数据(Metadata)和元数据管理的认知及理解. 元数据管理 一.元数据的定义 按照传统的定义,元数据(Met ...
- IIS本地部署局域网可随时访问的项目
原理 在本机的IIS下创建一个网站,文件目录直接指向Web项目文件夹 步骤 1.项目的启动项目为web 2.在iis中创建一个新的网站(Work_TK_EIS) 文件目录为web项目的目录(D:\Gi ...
- 短链接服务Octopus的实现与源码开放
前提 半年前(2020-06)左右,疫情触底反弹,公司的业务量不断提升,运营部门为了方便短信.模板消息推送等渠道的投放,提出了一个把长链接压缩为短链接的功能需求.当时为了快速推广,使用了一些比较知名的 ...
- 利用 Watermill 实现 Golang CQRS
CQRS CQRS 的意思是"命令-查询责任隔离".我们分离了命令(写请求)和查询(读请求)之间的责任.写请求和读请求由不同的对象处理. 就是这样.我们可以进一步分割数据存储,使用 ...
- sql字段拆分 ,连表子查询获取值
1.连表子查询获取值 select bas.name,bas.id_card_num,bas.mobil_no,gender,bas.birthday,bas.height,bas.weight,pr ...
- springboot日志输出到文件
今天来谈一谈日志,主要是说一说springboot的日志,因为最近在学习springboot.首先在写代码的时候,要养成记日志的习惯,这点真的很重要,因为之前吃了很多亏.过去我对日志很不在意,该有的日 ...
- linux security module机制
linux security module机制 概要 Hook机制,linux MAC的通用框架,可以使用SElinux, AppArmor,等作为不同安全框架的实现
- uni-app 页面跳转的两种方法
1.navigator 标签 <navigator url="../component/classdetails/classdetails"> <view cl ...
- Java反编译反混淆神器 - CFR
最近有大量jar包需要反编译后使用,但是由于jar包中的类被混淆过了,直接反编译以后的里面所有的变量都是一个名字.所以这里介绍一个反混淆神器:CRF. 不知道是不是官网的链接:http://www.b ...
- Linux下Oracle 11G XE 安装笔记
操作系统 [oracle@RAC02 ~]$ lsb_release -aLSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:cor ...