Django数据库的查看、删除,创建多张表并建立表之间关系
配置以下两处,可以方便我们直接右键运行tests.py一个文件,实现对数据库操作语句的调试:
settings里面的设置:
- #可以将Django对数据库的操作语法,能输出对应的的sql语句
- LOGGING = {
- 'version': 1,
- 'disable_existing_loggers': False,
- 'handlers': {
- 'console':{
- 'level':'DEBUG',
- 'class':'logging.StreamHandler',
- },
- },
- 'loggers': {
- 'django.db.backends': {
- 'handlers': ['console'],
- 'propagate': True,
- 'level':'DEBUG',
- },
- }
- }
tests.py的配置
- # 这样设置是方便我们直接在这里里面操作运行,就可以看效果
- import os
- if __name__ == '__main__':
- os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day08.settings")
- import django
- django.setup()
- # 导入models里面的Book模块,用于在这里引用
- from app01.models import *
- book=Book.objects.all().filter(publish='中央出版社88')
- print(book)
- book = Book.objects.all().filter(nid=1)
- print(book)
- #下面就可以写一些对数据库操作的命令,在本窗口就可以实现调试
- # 查询name里面以红字开头的
- book=Book.objects.all().filter(name__startswith='红')
- print(book.values_list()) #<QuerySet [(3, '红楼梦', Decimal('30.00'), datetime.date(2001, 1, 12), '作者2', '上海出版社')]>
- .......
数据库的查看操作:
- #基于双下划线的模糊查询
- # 查询name里面以红字开头的
- book=Book.objects.all().filter(name__startswith='红')
- print(book.values_list()) #<QuerySet [(3, '红楼梦', Decimal('30.00'), datetime.date(2001, 1, 12), '作者2', '上海出版社')]>
- #查询name里面以传字结尾的
- book=Book.objects.all().filter(name__endswith='传')
- print(book) #<QuerySet [<Book: 水浒传>, <Book: 自传>]>
- #查询name里面包含果字的
- book=Book.objects.all().filter(name__contains='国')
- print(book) #<QuerySet [<Book: 三国演义>, <Book: 国策>]>
- #name__icontains查询的时候不区分大小写,都能匹配到
- #查询在后面列表里面的id
- book=Book.objects.filter(nid__in=[1,2,3,4]) #匹配到4本
- print(book) #<QuerySet [<Book: 三国演义>, <Book: 书1>, <Book: 红楼梦>, <Book: 小红薯>]>
- #nid大于26的数据
- book=Book.objects.all().filter(nid__gt='')
- #nid小于3的数据
- book = Book.objects.all().filter(nid__lt=3)
- #nid小于等于3的数据
- book=Book.objects.filter(nid__lte='') #包含nid=3
- #nid大于等于26的数据
- book=Book.objects.filter(nid__gte='') #包含nid=26
- print(book)
- #查找id在列表范围内的数据(注意,包含1和3)
- # book=Book.objects.all().filter(nid__range=[1,3])
- # print(book)
- #查找>=10 并且 <=15的值
- book=Book.objects.all().filter(price__gte=20,price__lte=24)
- print(book) #<QuerySet [<Book: 三国演义>, <Book: 书1>, <Book: 国策>]>
- #根据出版日期查询,年、月、日
- book=Book.objects.filter(pub_date__year=1997)
- book=Book.objects.filter(pub_date__month=2)
- book=Book.objects.filter(pub_date__day=11)
- book=Book.objects.filter(pub_date__day__in=[12,5])
数据库的删除操作:
- #删除
- #queryset来删除
- ret=Book.objects.filter(nid=20).delete()
- print(ret) #(1, {'app01.Book': 1})
- #对象来删除
- ret = Book.objects.filter(nid=18).first() #书2
- ret = Book.objects.filter(nid=19).first().delete()
- print(ret) #(1, {'app01.Book': 1}) 1:本次操作总共影响了多少条记录 1:本张表里面影响的记录数
- #manager对象不行,例如:
- ret=Book.objects.delete()
- #这个可以,清空表里所有数据信息
- ret=Book.objects.all().delete() #不要轻易使用
数据库的更改操作:
- #更新(更新)
- #返回的结果是int类型,只能queryset对象来调用,对象不能来调用,返回的结果是int类型
- #例如下面first对象调用就报错:
- ret=Book.objects.all().filter(nid=9).first().update(name='aaa') #错误的写法,不能用对象调用
- print(ret) #报错 'Book' object has no attribute 'update'
- ret = Book.objects.all().filter(nid=9).update(name='书9999')
- print(ret) #
- ret = Book.objects.all().filter(nid=10).update(name='书10书10',price=1.1) #可以同时改几个字段
- print(ret) #
Django创建多张表并建立表之间的关系:
创建环境的注意点如下:
- 第一步:创建Django项目
- 第二步:创建static文件夹目录并,并在settings.py里面添加文件路径(此步骤本项目暂时没用到)
- STATIC_URL = '/static/'
- STATICFILES_DIRS = [
- os.path.join(BASE_DIR,'static')
- ]
- 第三步:settings.py里面这一行注释掉:
- # 'django.middleware.csrf.CsrfViewMiddleware',
- 第四步:app01---下面的---__init__.py文件下面设置,指定对mysql数据库的操作
- import pymysql
- pymysql.install_as_MySQLdb()
- 第五步:settings里面设置连接mysql数据库的信息,例如地址、端口、数据库名字、用户名、密码 等
- DATABASES = {
- # 'default': {
- # 'ENGINE': 'django.db.backends.sqlite3',
- # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
- # }
- 'default': {
- 'ENGINE': 'django.db.backends.mysql',
- 'NAME': 'info',
- 'HOST':'127.0.0.1',
- 'PORT':3306,
- 'USER':'root',
- 'PASSWORD':'root',
- }
- }
- 第六步:models里面设置class类(即单独设置每张表的字段、格式、以及关联关系等)
- 第七步:运行命令将将信息录入的数据库中
- python3 manage.py makemigrations
- python3 manage.py migrate
- 第八步:接下来就是对数据表的增、删、改、查操作
models.py里面的设置:
- from django.db import models
- # Create your models here.
- #出版社表
- class Publish(models.Model):
- nid=models.AutoField(primary_key=True)
- name=models.CharField(max_length=32)
- addr=models.CharField(max_length=64)
- email=models.EmailField()
- #作者表(与AuthorDetail是一对一关系)
- class Author(models.Model):
- nid=models.AutoField(primary_key=True)
- name=models.CharField(max_length=32)
- age=models.IntegerField()
- #建立与AuthorDetail一对一关系
- authordetail=models.OneToOneField(to='AuthorDetail',to_field='nid')
- #作者详细信息表
- class AuthorDetail(models.Model):
- nid=models.AutoField(primary_key=True)
- phone=models.CharField(max_length=32)
- email=models.EmailField()
- #书籍表
- class Book(models.Model):
- nid=models.AutoField(primary_key=True)
- price=models.DecimalField(max_digits=5,decimal_places=2)
- pub_date=models.DateField()
- #与出版社绑定一对多关系
- publish=models.ForeignKey(to='Publish',to_field='nid')
- #与作者绑定多对多关系(会生成第三张表)
- authors=models.ManyToManyField(to='Author')
建完之后关系图如下:
Django数据库的查看、删除,创建多张表并建立表之间关系的更多相关文章
- 在Oracle中十分钟内创建一张千万级别的表
小表不会产生性能问题,大表才会.要练习SQL调优,还非得有大表不可.但数据不会自然产生,没有数据时如何创建一张千万级别的大表呢? 之前,我想用Oracle的批量插入语法去插入数据,此语法如下: INS ...
- day 47 Django 4的简单应用 创建简单的图书管理 (单表的增删改查)
前情提要 Django 已经学了大半.. 很多东西已经能够使用在生产环境当中 一:模糊查询 二:单表删除 三:单表修改 四:图书管理 图书管理操作 视图结构 A:路由层 A :配置路由文件 参数解 ...
- 在Oracle中快速创建一张百万级别的表,一张十万级别的表 并修改两表中1%的数据 全部运行时间66秒
万以下小表做性能优化没有多大意义,因此我需要创建大表: 创建大表有三种方法,一种是insert into table selec..connect by.的方式,它最快但是数据要么是连续值,要么是随机 ...
- (转)Django 数据库
转:https://blog.csdn.net/ayhan_huang/article/details/77575186 目录 数据库说明 配置数据库 在屏幕输出orm操作对应的s ...
- django数据库迁移-15
目录 1.迁移 1.生成迁移文件 2.执行迁移命令 添加测试数据 1.迁移 创建完模型类后,并没有真正的在数据库中创建了数据表,需要执行迁移命令,在数据表中创建数据表. 1.生成迁移文件 manage ...
- Oracle创建表空间和表
创建表空间和表ORACLE物理上是由磁盘上的以下几种文件:数据文件和控制文件和LOGFILE构成的oracle中的表就是一张存储数据的表.表空间是逻辑上的划分.方便管理的.数据表空间 (Tablesp ...
- mysql数据库的基本操作:创建数据库、查看数据库、修改数据库、删除数据库
本节相关: 创建数据库 查看数据库 修改数据库 删除数据库 首发时间:2018-02-13 20:47 修改: 2018-04-07:考虑到规范化,将所有语法中“关键字”变成大写;以及因为整理“mys ...
- 夺命雷公狗---DEDECMS----31dedecms数据库创建一张表完成curl操作
首先我们创建一张测试表,格式如下所示: 然后我们还是在plus目录下创建一个test3.php进行测试,首先写一个添加的: <?php header("Content-Type:tex ...
- SQL语句创建数据库,SQL语句删除数据库,SQL语句创建表,SQL语句删除表,SQL语句添加约束,SQL语句删除约束
创建数据库: CREATE DATABASE Test --要创建的数据库名称 ON PRIMARY ( --数据库文件的具体描述 NAME='Test_data', --主数据文件的逻辑名称 FIL ...
随机推荐
- android dialog style属性设置
<!--最近做项目,用到alertDialog,用系统自带的style很难看,所以查了资料自己定义了个style. res/value/style.xml内增加以下代码:--> <s ...
- ios 利用runtime任性跳转
在开发项目中,会有这样变态的需求: 推送:根据服务端推送过来的数据规则,跳转到对应的控制器 feeds列表:不同类似的cell,可能跳转不同的控制器(嘘!产品经理是这样要求:我也不确定会跳转哪个界面哦 ...
- c# winform 关于DataGridView的一些操作
转自:http://heisetoufa.iteye.com/blog/405317 设置字段名 设置字段值 设定单元格表示 Error图标 设定当前单元格 取得当前单元格内容 取得当前单元格的列 I ...
- java面试题(杨晓峰)---第三讲谈谈final、finally、finalize有什么不同?
java语言有很多看起来相似,但用途却完全不相同的语言要素,这些内容往往容易成为面试官考察你知识掌握程度的切入点. 今天我要问你一个基础的java经典题目,谈谈final.finally.finali ...
- HTML之基本语法(链接标签、路径的介绍和使用)
一.链接标签 语法:<a href="目标地址">这个标签上展示的内容</a> 作用:可以实现在当前页面跳转到新页面的操作 属性 1.target这个属性可 ...
- 2018.4.27 Java的Swing常用事件
Swing常用事件 1.Java Swing中处理事件的一般步骤是: (1)新建一个组件(JButton) (2)将该组件添加到面板中(JPanel) (3)注册监听器以监听事件源产生的事件(如Act ...
- Mysql 8.0 新特性
转载:https://www.jianshu.com/p/be29467c2b0c
- Forbidden You don't have permission to access /phpStudyTest/application/index/controller/Index.php on this server.
发生情况:将thinkPHP从官网上下了 http://thinkphp.cn 然后安装了phpstudy和PHPstorm,并将thinkPHP解压到www路径下 在用PHPstorm打开 thi ...
- Luogu [P3367] 模板 并查集
[模板]并查集 题目详见:[[P3367][模板]并查集] (https://www.luogu.org/problemnew/show/P3367) 这是一道裸的并查集题目(要不然叫模板呢) 废话不 ...
- AddDbContext was called with configuration, but the context type 'NewsContext' only declares a parameterless constructor?
问题 An error occurred while starting the application. ArgumentException: AddDbContext was called with ...