zoukankan      html  css  js  c++  java
  • django文档总结之数据库操作-mysql(3)

    模板使用

    1 在templates文件夹里创建模板文件index.html
    
    2 在模板文件中添加语法:<h1>{{ city }}</h1> 
    
    3 模板渲染:定义视图函数,添加到urls.py中
    
    from django.shortcuts import render
    
    def index(request):
    
    	context = {'city': '北京'}
    
    	return render(request, 'index.html', context)
    

    数据库准备

    1 使用mysql数据库,在所用虚拟环境下先安装驱动程序 :

    pip install PyMySQL
    

    2 在同名子目录的__init__中添加语句 (让Django的ORM能以mysqldb的方式来调用PyMySql)

    from pymysql import install_as_MySQLdb
    
    install_as_MySQLdb()
    

    3 修改DATABASES的配置信息

    DATABASES = {
    
    	'default': {
    
    		'ENGINE': 'django.db.backends.mysql',
    
    		'HOST': '127.0.0.1',  # 数据库主机
    
    		'PORT': 3306,  # 数据库端口
    
    		'USER': 'root',  # 数据库用户名
    
    		'PASSWORD': 'mysql',  # 数据库用户密码
    
    		'NAME': 'django_demo'  # 数据库名字
    
    	}
    
    }
    

    4 在MySQL中创建数据库:

    create database django_demo default charset=utf8;
    

    5 创建应用booktest,在models.py文件中定义模型类

    定义图书模型类BookInfo

    class BookInfo(models.Model):
    
    	...
    
    	属性名 = models.字段类型(选项)
    
    	...
    
    	# 自定义表信息,Meta是固定的
    
    	class Meta:
    
    	db_table = 'tb_book' # 定义表名(未定义时默认:小写app应用名_小写模型类名)
    
    	verbose_name = '图书'  # 在admin站点中显示的名称
    

    定义英雄模型类HeroInfo

    class HeroInfo(models.Model):
    
    	...
    
    	# 外键:参数为类的名称
    
    	book = models.ForeignKey('BookInfo')
    
    	# models.Foreinkey()一对多
    
    	# models.OneToOneField一对一
    
    	# models.ManyToManyField多对多
    
    	#隐含属性:book_id
    
    	#book代表一个BookInfo类型的对象
    
    	#book_id代表某个对象的主键值
    
    	#默认创建的主键列属性为id,可以使用pk代替
    

    6 数据库迁移

    python manage.py makemigrations   # 生成迁移文件
    
    python manage.py migrate     # 同步到数据库中(模板类如果属性改变,就需要同步)
    

    7 在数据库中添加数据

    insert into 表名(属性名1,属性名2...) values(对应值1,对应值2...)
    

    数据库操作

    class AddView(View):
    
    	def get(self,request)
    
    		return render(request,'add.html')
    
    	def post(self,request)
    
    		# 确定根据哪些属性增加
    
    		dict1 = request.POST
    
    		title = dict1.get('title')
    
    		pub_date = dict1.get('pub_date')
    
    		# 通过创建模型类对象,执行对象的save()方法保存到数据库中
    
    		book = BookInfo()
    
    		book.title = title
    
    		book.pub_date = datetime.strptime(pub_date, '%Y-%m-%d')
    
    		book.save()
    		return redirect('/')  # 返回主页
    

    class EditView(View):
    
    	def get(self, request, pk):
    
    		# 第一个pk表示类BookInfo中的属性的名称,表示主键
    
    		# 第二个pk表示视图函数接收的参数pk
    
    		book = BookInfo.objects.get(pk=pk)
    
    		context = {'book': book}
    
    		return render(request, 'edit.html', context)
    
    	def post(self, request, pk):
    
    		...获取要修改的属性值
    
    		# 修改数据
    
    		book = BookInfo.objects.get(pk=pk)
    
    		book.title = title
    
    		book.pub_date = datetime.strptime(pub_date, '%Y-%m-%d')
    
    		book.save()
    

    class DeleteView(View):
    
    	def get(self, request, pk):
    
    		...
    
    	def post(self, request, pk):
    
    		# 删除
    
    		book = BookInfo.objects.get(pk=pk)
    
    		book.delete()
    
    

    一般查询

    过滤

    filter(过滤条件) 过滤出多个结果
    exclude(过滤条件) 排除掉符合条件剩下的结果
    get(过滤条件) 过滤单一结果

    过滤条件:属性名__比较运算符=值

    比较运算符:

    • exact(表判断),
    • contains(包含),
    • startswith,
    • endswith,
    • in(包含在),
    • gt(大于),
    • gte(大于等于),
    • lt(小于),
    • lte(小于等于)

    对日期时间:year、month、day、week_day、hour、minute、second

    F & Q

    F(属性名)实现属性间比较:

    BookInfo.objects.filter(bread__gte=F('bcomment'))

    Q(属性名__运算符=值)实现逻辑与或非:BookInfo.objects.filter(Q(bread__gt=20) | Q(pk__lt=3))

    聚合函数

    • Avg,
    • Count,
    • Max,
    • Min,
    • Sum:BookInfo.objects.aggregate(Sum('属性名'))

    set与非set

    已知book对象,获取所有对应的英雄对象,使用book.heroinfo_set.all()
    已知英雄的条件,查询图书对象,使用heroinfo__属性__运算符=值

    查询集QuerySet

    blist = BookInfo.objects.all()
    
    context = {
    
    	'blist': blist
    
    }
    
    return render(request, 'index.html', context)
    

    all():返回所有数据。
    filter(条件):返回满足条件的数据。
    exclude(条件):返回满足条件之外的数据。
    order_by(属性):根据属性对结果进行升序(-降序)。

    查询集两大特性:惰性缓存
    优点:尽量减少与数据库交互的次数
    使用场景:迭代判断序列化

    管理器

    在每个模型类中,默认有一个管理器,名称为objects

    django支持开发人员自定义管理器

    一旦自定义管理器,则不再有默认管理器objects

    book=BookInfo.objects.create(属性)
    
    book=BookInfo()
    
    book.**=**
    
    book.save()
    
    
  • 相关阅读:
    flume-agent实例
    Apache Ant在Windows下配置环境变量
    作业流程和优化
    使用MapReduce查询Hbase表指定列簇的全部数据输出到HDFS(一)
    使用MapReduce将HDFS数据导入到HBase(二)
    数据结构(一)线性表——顺序表
    Java类集综合练习——信息管理(增、删、改、查)
    MySQL数据库表的数据插入、修改、删除、查询操作及实例应用
    总结一下这几节Java课的...重点!!!
    文件I/O操作——File类
  • 原文地址:https://www.cnblogs.com/davis12/p/14376841.html
Copyright © 2011-2022 走看看