修改默认数据库

  django默认数据库为 SQLite3,若需要修改,比如改成mysql,则需要修改与settings.py文件同路径的__init__.py文件,添加如下内容:

  

  1. import pymysql
  2. pymysql.install_as_MySQLdb()

  

ORM

  1、单表增删改查

    在models.py文件中创建数据库对象,然后同步数据库。

      

  1. from django.db import models
  2.  
  3. class Person(models.Model):
  4. name = models.CharField(max_length=30)
  5. age = models.IntegerField()

    在views.py中导入models.py(from app.models import *),然后可以在函数或者方法中使用如下内容来调用数据库。

    增:

  1. 增加数据有两种方式
  2.  
  3. 方式1
  4.  
  5. b = Person(name=”姓名“,age=年龄)
  6. b.save()
  7.  
  8. 方式二
  9.  
  10. Person.objects.create(name=”姓名“,age=年龄)

    改:

  1. 方式1
  2. Person.objects.filter(name="姓名").update(age=新的年龄)
  3.  
  4. 方式2
  5.  
  6. p= Person.objects.get(name="姓名")
  7.  
  8. p.age = 新的年龄
  9.  
  10. p.save()
  11.  
  12. 请注意get只能取出一条,多了会报错。

  

   删:

  1. Person.objects.filter(name="姓名").delete()

   查询:

    都是通过objects来调用查询方法:如Person.objects.all()

    

  1. # 查询相关API:
  2.  
  3. # <1>filter(**kwargs): 它包含了与所给筛选条件相匹配的对象
  4.  
  5. # <2>all(): 查询所有结果
  6.  
  7. # <3>get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。
  8.  
  9. #-----------下面的方法都是对查询的结果再进行处理:比如 objects.filter.values()--------
  10.  
  11. # <4>values(*field): 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列 model的实例化对象,而是一个可迭代的字典序列
  12.  
  13. # <5>exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象
  14.  
  15. # <6>order_by(*field): 对查询结果排序
  16.  
  17. # <7>reverse(): 对查询结果反向排序
  18.  
  19. # <8>distinct(): 从返回结果中剔除重复纪录
  20.  
  21. # <9>values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列
  22.  
  23. # <10>count(): 返回数据库中匹配查询(QuerySet)的对象数量。
  24.  
  25. # <11>first(): 返回第一条记录
  26.  
  27. # <12>last(): 返回最后一条记录
  28.  
  29. # <13>exists(): 如果QuerySet包含数据,就返回True,否则返回False。

  2、一对多

      创建数据库:

      

  1. from django.db import models
  2. class Publisher(models.Model):
  3. name = models.CharField(max_length=30, verbose_name="名称")
  4. address = models.CharField("地址", max_length=50)
  5. city = models.CharField('城市',max_length=60)
  6. state_province = models.CharField(max_length=30)
  7. country = models.CharField(max_length=50)
  8. website = models.URLField()
  9.  
  10. def __str__(self):
  11. return self.name
  12.  
  13. class Book(models.Model):
  14. title = models.CharField(max_length=100)
  15. publisher = models.ForeignKey("Publisher")
  16. publication_date = models.DateField()
  17. price=models.DecimalField(max_digits=5,decimal_places=2,default=10)
  18.  
  19. def __str__(self):
  20. return self.title

  publisher = models.ForeignKey("Publisher")就是建立外键关联。

    增:

  1. #一对多(ForeignKey):
  2.  
  3. #方式一: 由于绑定一对多的字段,比如publish,存到数据库中的字段名叫publish_id,所以我们可以直接给这个
  4. # 字段设定对应值:
  5. Book.objects.create(title='php',
  6. publisher_id=2, #这里的2是指为该book对象绑定了Publisher表中id=2的行对象
  7. publication_date='2017-7-7',
  8. price=99)
  9.  
  10. #方式二:
  11. # <1> 先获取要绑定的Publisher对象:
  12. pub_obj=Publisher(name='河大出版社',address='保定',city='保定',
  13. state_province='河北',country='China',website='http://www.hbu.com')
  14. OR pub_obj=Publisher.objects.get(id=1)
  15.  
  16. Book.objects.create(title='php',
  17. publisher=pub_obj, #将 publisher_id=2 改为 publisher=pub_obj
  18. publication_date='2017-7-7',
  19. price=99)

    

  3、多对多  

      

  1. from django.db import models<br>
  2. class Publisher(models.Model):
  3. name = models.CharField(max_length=30, verbose_name="名称")
  4. address = models.CharField("地址", max_length=50)
  5. city = models.CharField('城市',max_length=60)
  6. state_province = models.CharField(max_length=30)
  7. country = models.CharField(max_length=50)
  8. website = models.URLField()
  9.  
  10. class Meta:
  11. verbose_name = '出版商'
  12. verbose_name_plural = verbose_name
  13.  
  14. def __str__(self):
  15. return self.name
  16.  
  17. class Author(models.Model):
  18. name = models.CharField(max_length=30)
  19. def __str__(self):
  20. return self.name
  21.  
  22. class AuthorDetail(models.Model):
  23. sex = models.BooleanField(max_length=1, choices=((0, '男'),(1, '女'),))
  24. email = models.EmailField()
  25. address = models.CharField(max_length=50)
  26. birthday = models.DateField()
  27. author = models.OneToOneField(Author)
  28.  
  29. class Book(models.Model):
  30. title = models.CharField(max_length=100)
  31. authors = models.ManyToManyField(Author)
  32. publisher = models.ForeignKey(Publisher)
  33. publication_date = models.DateField()
  34. price=models.DecimalField(max_digits=5,decimal_places=2,default=10)
  35. def __str__(self):
  36. return self.title

    增:

    

  1. #多对多(ManyToManyField()):
  2.  
  3. author1=Author.objects.get(id=1)
  4. author2=Author.objects.filter(name='alvin')[0]
  5. book=Book.objects.get(id=1)
  6. book.authors.add(author1,author2)
  7. #等同于:
  8. book.authors.add(*[author1,author2])
  9. book.authors.remove(*[author1,author2])
  10. #-------------------
  11. book=models.Book.objects.filter(id__gt=1)
  12. authors=models.Author.objects.filter(id=1)[0]
  13. authors.book_set.add(*book)
  14. authors.book_set.remove(*book)
  15. #-------------------
  16. book.authors.add(1)
  17. book.authors.remove(1)
  18. authors.book_set.add(1)
  19. authors.book_set.remove(1)
  20.  
  21. #注意: 如果第三张表是通过models.ManyToManyField()自动创建的,那么绑定关系只有上面一种方式
  22. # 如果第三张表是自己创建的:
  23. class Book2Author(models.Model):
  24. author=models.ForeignKey("Author")
  25. Book= models.ForeignKey("Book")
  26. # 那么就还有一种方式:
  27. author_obj=models.Author.objects.filter(id=2)[0]
  28. book_obj =models.Book.objects.filter(id=3)[0]
  29.  
  30. s=models.Book2Author.objects.create(author_id=1,Book_id=2)
  31. s.save()
  32. s=models.Book2Author(author=author_obj,Book_id=1)
  33. s.save()

     删:

  1. Book.objects.filter(id=1).delete()
  2. #我们表面上删除了一条信息,实际却删除了三条,因为我们删除的这本书在Book_authors表中有两条相关信息,这种删除方式就是django默认的级联删除。

        

同步数据库 (将写好的数据表写入数据库)

  # Django 1.6.x 及以下

  python manage.py syncdb
 
  # Django 1.7 及以上的版本需要用以下命令
  python manage.py makemigrations
  python manage.py migrate
 
 
 
 
 
 
参考:https://www.cnblogs.com/yuanchenqi/articles/6083427.htm

django-5-使用数据库的更多相关文章

  1. Django根据现有数据库建立model

    Django引入外部数据库还是比较方便的,步骤如下 创建一个项目,修改seting文件,在setting里面设置你要连接的数据库类型和连接名称,地址之类,和创建新项目的时候一致 运行下面代码可以自动生 ...

  2. python——django使用mysql数据库(二)

    上一篇中,我们已经讲述了如何初始化一个django数据库,这一章就来讲讲在实际的项目中如何使用我们初始化的数据库呢? 如还未进行初始化数据库操作,请参考python——django使用mysql数据库 ...

  3. python——django使用mysql数据库(一)

    之前已经写过如何创建一个django项目,现在我们已经有了一个小骷髅,要想这个web工程变成一个有血有肉的人,我们还需要做很多操作.现在就先来介绍如何在django中使用mysql数据库. 前提:已经 ...

  4. ubuntu 下搭建一个python3的虚拟环境(用于django配合postgresql数据库开发)

     #安装python pip  (在物理环境中安装) sudo apt-get install python-pip       sudo apt-get install python3-pipsud ...

  5. django MVC模式 数据库的操作mysql

    介绍:本节课我们继续学习djangoWEB框架的开发,这节课主要是学习如何访问数据库,django如何自动为我们创建好表结构等相关内容. 1.首先我们打开settings.py找到DATABASES关 ...

  6. Django 连接mysql数据库中文乱码

    Django 连接mysql数据库中文乱码 2018年08月25日 20:55:15 可乐乐乐乐乐 阅读数:566   版本:CentOS6.8 python3.6.4 django1.8.2 数据库 ...

  7. 用 Django 管理现有数据库

    在多数项目中,总有一些几乎一成不变的 CRUD 操作,编写这些代码很无聊,但又是整个系统必不可少的功能之一.我们在上一个项目中也面临类似的问题,虽然已经实现了一个功能相对完整的管理后台,也尽量做到了代 ...

  8. django之ORM数据库操作

    一.ORM介绍 映射关系: 表名 -------------------->类名 字段-------------------->属性 表记录----------------->类实例 ...

  9. django引入现有数据库 转

    django引入现有数据库   Django引入外部数据库还是比较方便的,步骤如下: 1.创建一个项目,修改seting文件,在setting里面设置你要连接的数据库类型和连接名称,地址之类,和创建新 ...

  10. Django根据现有数据库建立/更新model

    Django引入外部数据库还是比较方便的,步骤如下: 创建一个项目,修改seting文件,在setting里面设置你要连接的数据库类型和连接名称,地址之类,和创建新项目的时候一致 运行下面代码可以自动 ...

随机推荐

  1. UVAlive 6756 Increasing Shortest Path

    We all love short and direct problems, it is easier to write, read and understand the problem statem ...

  2. Activiti6.0 java项目框架 spring5 SSM 工作流引擎 审批流程

    工作流模块----------------------------------------------------------------------------------------------- ...

  3. LeetCode Array Easy 485. Max Consecutive Ones

    Description Given a binary array, find the maximum number of consecutive 1s in this array. Example 1 ...

  4. go语言从例子开始之Example35.原子计数器

    Go 中最主要的状态管理方式是通过通道间的沟通来完成的,我们在工作池的例子中碰到过,但是还是有一些其他的方法来管理状态的.这里我们将看看如何使用 sync/atomic包在多个 Go 协程中进行 原子 ...

  5. Django--Auth模块使用

    1.Auth模块介绍 1.1 Auth模块是Django自带的用户认证模块,用于处理用户账户.群组.许可和基于cookie的用户回话 Django的认证系统主要包括下面几个部分 1.用户 2.许可 3 ...

  6. centos7系统中忘记了root管理员账号密码的解决方式(转)

    随着计算机的使用越来越普遍,现在的用户都会有多个密码,不是这软件的密码就是那个的,QQ.邮箱.游戏,还有系统的登录密码!每一个密码都不一样!所以越来越多的密码需要去记住!也因为这样,只要其中一个长时间 ...

  7. postgresql绿色版安装及Navicat创建数据库,导入导出sql

    转载:https://www.cnblogs.com/winkey4986/p/5360551.html 1.设置安装路径为:D:\soft\pgsql,数据存储路径为:D:\soft\pgsql\d ...

  8. mysql中文乱码解决办法

    Windows 在C:\Program Files\MySQL\MySQL Server 5.5\bin目录下 MySQLInstanceConfig.exe执行 重新配置character_set_ ...

  9. DevOps打造端到端的价值交付

    首先就要来说下什么是端到端: 敏捷帮助我们解决了开发域从计划到测试(部分测试内容)的问题 持续集成帮助解决了从计划到测试完成的过程 持续发布解决了从计划到待发布的过程 持续部署解决了从计划到已上线的过 ...

  10. Python的list中的选取范围

    a = [1,2,3,4,5,6,7,8,9,10] a[0:1] = [1] a[0:2] = [1,2] 包含开头,不包含结尾. a [:-1]: 从头一直到最后一个元素a[-1],但不包含最后一 ...