Django 学习笔记(七)数据库基本操作(增查改删)
一、前期准备工作,创建数据库以及数据表,详情点击《Django 学习笔记(六)MySQL配置》
1.创建一个项目
2.创建一个应用
3.更改settings.py
4.更改models.py
5.同步数据
二、安装IPython方便debug
sudo apt-get install ipython3
安装成功后用python manage.py shell 会自动进入Ipython交互解释器中,没有安装Ipython只有前两行代码,只进入到Python shell 中。
Python 3.5.2+ (default, Sep 22 2016, 12:18:14)
Type "copyright", "credits" or "license" for more information. IPython 2.4.1 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details. In [1]:
如果直接启用Ipython3的话,也可以出现以下代码,但是由于没有定位在那个位置,将会出现ImproperlyConfigured错误。原因是直接启动Ipython交互解释器,没有设置Django的环境变量DJANGO_SETTINGS_MODULE,添加上环境变量即可运行,所以还是推荐直接运行Python manage.py shell命令。
ImproperlyConfigured Traceback (most recent call last)
<ipython-input-1-df0154182ca0> in <module>()
----> 1 from blog.models import Person /home/lee/MySQL1/blog/models.py in <module>()
1 from django.db import models
2
----> 3 class Person(models.Model):
4 name = models.CharField(max_length=10)
5 /home/lee/MySQL1/blog/models.py in Person()
2
3 class Person(models.Model):
----> 4 name = models.CharField(max_length=10)
5
6 def __str__(self): /home/lee/.local/lib/python3.5/site-packages/django/db/models/fields/__init__.py in __init__(self, *args, **kwargs)
1059
1060 def __init__(self, *args, **kwargs):
-> 1061 super(CharField, self).__init__(*args, **kwargs)
1062 self.validators.append(validators.MaxLengthValidator(self.max_length))
1063 /home/lee/.local/lib/python3.5/site-packages/django/db/models/fields/__init__.py in __init__(self, verbose_name, name, primary_key, max_length, unique, blank, null, db_index, rel, default, editable, serialize, unique_for_date, unique_for_month, unique_for_year, choices, help_text, db_column, db_tablespace, auto_created, validators, error_messages)
170 self.db_index = db_index
171 self.db_column = db_column
--> 172 self.db_tablespace = db_tablespace or settings.DEFAULT_INDEX_TABLESPACE
173 self.auto_created = auto_created
174 /home/lee/.local/lib/python3.5/site-packages/django/conf/__init__.py in __getattr__(self, name)
54 """
55 if self._wrapped is empty:
---> 56 self._setup(name)
57 val = getattr(self._wrapped, name)
58 self.__dict__[name] = val /home/lee/.local/lib/python3.5/site-packages/django/conf/__init__.py in _setup(self, name)
37 "You must either define the environment variable %s "
38 "or call settings.configure() before accessing settings."
---> 39 % (desc, ENVIRONMENT_VARIABLE))
40
41 self._wrapped = Settings(settings_module) ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
ImproperlyConfigured
解决办法是将下面三行代码写上,其中MySQL1是项目的名称,在本文中项目名称是MySQL1。
import os,django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "MySQL1.settings")
django.setup()
三、添加数据
1.第一种方式,创建类的实例对象,修改对象的属性,保存。
In [1]: from blog.models import Person In [2]: p1=Person() In [3]: p1.name='Lee' In [4]: p1.save()
2.第二种方式,直接在类实例化的时候,构造方法直接给予字段属性,保存。
In [5]: p2=Person(name='Kein') In [6]: p2.save()
3.第三种方法,调用类管理器中的create方法。
In [7]: p3=Person.objects.create(name='KeinLee')
MySQL数据库内容:
四、查询数据
1.查询全部
In [8]: Person.objects.all()
Out[8]: <QuerySet [<Person: Lee>, <Person: Kein>, <Person: KeinLee>]>
如果出现全部都是Person: Person Object ,请在blog/models.py中添加__str__,返回字符方法。
from django.db import models class Person(models.Model):
name = models.CharField(max_length=10) def __str__(self):
return self.name
2.查询特定条件,filter相当于=,exclude相当于!=,get直接得出对象而不是QuerySet对象。
In [9]: Person.objects.filter(name='Lee')
Out[9]: <QuerySet [<Person: Lee>]> In [10]: Person.objects.exclude(name='Lee')
Out[10]: <QuerySet [<Person: Kein>, <Person: KeinLee>]> In [11]: Person.objects.get(name='Lee')
Out[11]: <Person: Lee>
五、修改数据
在查询数据的基础上修改,一个是filter修改,另一个是get修改,这两种方法是不一样的,因为查询结果的对象不一样。
In [12]: Person.objects.filter(name='Kein').update(name='Ben')
Out[12]: 1 In [13]: p=Person.objects.get(name='Lee') In [14]: p.name='Alen' In [15]: p.save()
六、删除数据
删除数据就直接在查询数据的基础上加一个.delete()即可。
In [16]: Person.objects.get(name='Lee').delete()
Out[16]: (1, {'blog.Person': 1}) In [17]: Person.objects.filter(name='Kein').delete()
Out[17]: (1, {'blog.Person': 1}) In [18]: Person.objects.exclude(name='Lee').delete()
Out[18]: (1, {'blog.Person': 1})
系列上一篇:Django 学习笔记(六)MySQL配置
系列下一篇:
Django 学习笔记(七)数据库基本操作(增查改删)的更多相关文章
- MongoDB学习记录(四) - MongoDB的"增查改删"操作之"改"
更新文档主要有以下几种方法: db.collection.updateOne(filter, update, options) db.collection.updateMany(filter, upd ...
- MongoDB学习记录(三) - MongoDB的"增查改删"操作之"查"
查找使用的方法: db.collection.find() 查找所有文档 db.collection.find({})或者db.collection.find({}) 指定键值对 db.collect ...
- MongoDB学习记录(二) - MongoDB的"增查改删"操作之"增"
如果做插入文档操作的集合不存在,那么集合将被创建 db.collection.insertOne() insertOne为collection插入一条文档,如果文档的_id字段未指定,MongoDB会 ...
- SQL Server 2012 学习笔记3 增查改删
现在举例几个"增查改删"的语句 select * from UserInfor --查找所有字段 select username,UserId from UserInfor -- ...
- ylb:创建数据库、表,对表的增查改删语句
ylbtech-SQL Server:SQL Server-创建数据库.表,对表的增查改删语句 SQL Server 创建数据库.表,对表的增查改删语句. 1,ylb:创建数据库.表,对表的增查改删语 ...
- EF里单个实体的增查改删以及主从表关联数据的各种增删 改查
本文目录 EF对单个实体的增查改删 增加单个实体 查询单个实体 修改单个实体 删除单个实体 EF里主从表关联数据的各种增删改查 增加(增加从表数据.增加主从表数据) 查询(根据主表找从表数据.根据从表 ...
- DOM树的增查改删总结
DOM树的增查改删总结 摘要:对HTML DOM的操作是前端JavaScript编程时必备的技能,本文是我自己对DOM树操作的总结,主要是方法的罗列,原理性的讲述较少,适合大家用于理清思路或是温习 一 ...
- JS 数组, 对象的增查改删(多语法对比)
数据结构横向对比, 增, 查, 改, 删 建议: 在用数据结构的时候, 优先考虑Map和Set(考虑数据的唯一性), 放弃传统的数组和Object, 特别是比较复杂的数据结构时 数组 Map与Arra ...
- Django 学习笔记之三 数据库输入数据
假设建立了django_blog项目,建立blog的app ,在models.py里面增加了Blog类,同步数据库,并且建立了对应的表.具体的参照Django 学习笔记之二的相关命令. 那么这篇主要介 ...
随机推荐
- RobotFramwork安装报错name 'execfile' is not defined
安装RobotFramwork的时候,提示了这个?是什么原因呢? 本机装的是python3.6: 经官方回复得知识因为python的版本不兼容该模块的安装. 官方认定版本是2.7,所以这里推荐大家玩p ...
- RxSwift 实战操作【注册登录】
前言 看了前面的文章,相信很多同学还不知道RxSwift该怎么使用,这篇文件将带领大家一起写一个 注册登录(ps:本例子采用MVVM)的例子进行实战.本篇文章是基于RxSwift3.0写的,采用的是C ...
- (转)eclipse导入Gradle项目
场景:最近在学习spring实战(第4版),下载完源码后发现不是maven工程,使用Gradle构建. 1准备工作 1.1 安装插件 打开eclipse,Help——Marketplace,搜索bui ...
- node调用phantomjs-node爬取复杂页面
什么是phantomjs phantomjs官网是这么说的,'整站测试,屏幕捕获,自动翻页,网络监控',目前比较流行用来爬取复杂的,难以通过api或正则匹配的页面,比如页面是通过异步加载.phanto ...
- C#多线程之旅(7)——终止线程
先交代下背景,写<C#多线程之旅>这个系列文章主要是因为以下几个原因:1.多线程在C/S和B/S架构中用得是非常多的;2.而且多线程的使用是非常复杂的,如果没有用好,容易造成很多问题. ...
- HDU6055 Regular polygon(计算几何)
Description On a two-dimensional plane, give you n integer points. Your task is to figure out how ma ...
- git分支管理之分支管理策略
分支管理策略 阅读: 246888 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息. 如果要强制禁用Fast forward模式,Git就 ...
- js存款计算器原生小demo
大家好,本人是初入前端的一枚程序猿,深知js底层开发的重要性,这也是我的软肋所在(曾经以为),渐渐的明白了一个道理,饭要一口口吃,路要一步步走,这也是我想告诉给所有刚刚进入IT行业的技术员们,沉下心, ...
- Centos 7.3 安装mysql5.7.19 各种调试就不多说了
mysql 5.7.19linux-glibc2.12 (x86_64) 安装 1.在安装目录进行解压2.mv解压目录为mysql3.创建mysql的用户 useradd -s /sbin/nolon ...
- Oracle联机日志损坏解决办法
关于此问题,在网上找到一篇不错的文章. 大家都清楚,联机日志分为当前联机日志和非当前联机日志. ---------------------------------------------------- ...