配置以下两处,可以方便我们直接右键运行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数据库的查看、删除,创建多张表并建立表之间关系的更多相关文章

  1. 在Oracle中十分钟内创建一张千万级别的表

    小表不会产生性能问题,大表才会.要练习SQL调优,还非得有大表不可.但数据不会自然产生,没有数据时如何创建一张千万级别的大表呢? 之前,我想用Oracle的批量插入语法去插入数据,此语法如下: INS ...

  2. day 47 Django 4的简单应用 创建简单的图书管理 (单表的增删改查)

    前情提要  Django  已经学了大半.. 很多东西已经能够使用在生产环境当中 一:模糊查询 二:单表删除 三:单表修改 四:图书管理 图书管理操作 视图结构 A:路由层 A :配置路由文件 参数解 ...

  3. 在Oracle中快速创建一张百万级别的表,一张十万级别的表 并修改两表中1%的数据 全部运行时间66秒

    万以下小表做性能优化没有多大意义,因此我需要创建大表: 创建大表有三种方法,一种是insert into table selec..connect by.的方式,它最快但是数据要么是连续值,要么是随机 ...

  4. (转)Django 数据库

         转:https://blog.csdn.net/ayhan_huang/article/details/77575186      目录 数据库说明 配置数据库 在屏幕输出orm操作对应的s ...

  5. django数据库迁移-15

    目录 1.迁移 1.生成迁移文件 2.执行迁移命令 添加测试数据 1.迁移 创建完模型类后,并没有真正的在数据库中创建了数据表,需要执行迁移命令,在数据表中创建数据表. 1.生成迁移文件 manage ...

  6. Oracle创建表空间和表

    创建表空间和表ORACLE物理上是由磁盘上的以下几种文件:数据文件和控制文件和LOGFILE构成的oracle中的表就是一张存储数据的表.表空间是逻辑上的划分.方便管理的.数据表空间 (Tablesp ...

  7. mysql数据库的基本操作:创建数据库、查看数据库、修改数据库、删除数据库

    本节相关: 创建数据库 查看数据库 修改数据库 删除数据库 首发时间:2018-02-13 20:47 修改: 2018-04-07:考虑到规范化,将所有语法中“关键字”变成大写;以及因为整理“mys ...

  8. 夺命雷公狗---DEDECMS----31dedecms数据库创建一张表完成curl操作

    首先我们创建一张测试表,格式如下所示: 然后我们还是在plus目录下创建一个test3.php进行测试,首先写一个添加的: <?php header("Content-Type:tex ...

  9. SQL语句创建数据库,SQL语句删除数据库,SQL语句创建表,SQL语句删除表,SQL语句添加约束,SQL语句删除约束

    创建数据库: CREATE DATABASE Test --要创建的数据库名称 ON PRIMARY ( --数据库文件的具体描述 NAME='Test_data', --主数据文件的逻辑名称 FIL ...

随机推荐

  1. eclipse、idea安装lombok插件

    今天新项目中,用到了lombok知识,很方便. 但是使用之前,需要在eclipse.idea中安装插件才可以使用,配置如下.  一:在开发工具中安装插件: Eclipse: 下载地址:https:// ...

  2. ubuntu下irobot串口通讯

    在window下以前就`有一个现成的串口代码.想移植到ubuntu下,发现都不一样了.要重新找个. 折腾了一上午之后,发现自己写这个串口通讯还是有一点难度. 于是,用了github上 Erick Co ...

  3. 64位Windows系统下32位应用程序连接MySql

    1.首先得安装“Connector/ODBC”,就是Mysql的ODBC驱动,这个是与应用程序相关的,而不是与操作系统相关的,也就是说,不管你的系统是x64还是x86,只要你的应用程序是x86的那么, ...

  4. Python+selenium之疑难点解决之去除readonly的限制

    去除文本框的readonly只读模式的限制 如图所示:去除卡号readonly限制 代码如图所示: js = 'document.getElementById("cardNo"). ...

  5. python中的构造函数和构造函数和析构函数的作用

    构造函数和构造函数和析构函数都属于python中的特殊方法 其中的“__del__”就是一个析构函数了,当使用del 删除对象时,会调用他本身的析构函数,另外当对象在某个作用域中调用完毕,在跳出其作用 ...

  6. .NET 读取视频文件

    该篇文章 复制别人的文章 在.NET中处理视频是一件痛苦的事情,.NET并没有提供视频处理的类.于是咱们只能找一些第三方的类库或者自己实现,在项目时间比较赶的情况下,自己实现是不可能的了,而且说不定会 ...

  7. POJ 3252 Round Numbers (区间DP,基础)

    题意: 统计区间[L,R]有多少个数,其二进制表示法中的0的个数不少于1的个数?(不允许前缀0) 思路: 状态表示为 [当前第几位][总位数][1的个数],最后判断一下1的个数是否满足条件,要注意前导 ...

  8. 【Windows 10 v1703】解决桌面出现Removable Storage Devices的问题

    症状如下: 右键没有正常菜单,不能查看属性. 不能通过文件树找到这个文件夹. 出现原因不明. 暂时的解决方案: 右键,新建一个快捷方式.然后将快捷方式拖进垃圾桶,删除.这个文件夹将会被连带删除. 感谢 ...

  9. python爬虫之路——初识基本页面构造原理

    通过chrome浏览器的使用简单介绍网页构成 360浏览器使用右键审查元素,Chrome浏览器使用右键检查,都可查看网页代码. 网页代码有两部分:HTML文件和CSS样式.其中有<script& ...

  10. [dp]uestc oj E - 菲波拉契数制

    E - 菲波拉契数制 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...