当前位置: 首页>编程语言>正文

Django中sqlite数据库中数据传到JS程序中 django向数据库写入数据

1、通过视图向数据库中增加数据
  • 1、Entry.objects.create(属性1=值1,属性2=值2)
# urls.py
urlpatterns = [url(r'^add_data/$', add_data_views)]  # 配置视图函数

# views.py
from django.http import HttpResponse
from .models impotr *   # 导入实体类

def add_data_views(request):   # 定义视图函数
	Author.objects.create(name='Sam', age=33, email='sam@123.com')
	# 在Author表中插入数据,字段为name,age,email
	return HttpResponse('ADD OK')
  • 2、创建一个视图对象,通过save()方法完成
  • obj = Entry(属性1=值1,属性2=值2)
  • obj.save()
# urls.py
urlpatterns = [url(r'^add_data/$', add_data_views)]  # 配置视图函数

# views.py
from django.http import HttpResponse
from .models impotr *   # 导入实体类

def add_data_views(response):   # 定义视图函数
	author = Author(name='Jean', age=36, email='jean@123.com')
	# 在Author表中插入数据,字段为name,age,email
	author.save()
	return HttpResponse('ADD OK')
  • 3、通过字典创建视图对象,再调用save()
# urls.py
urlpatterns = [url(r'^add_data/$', add_data_views)]  # 配置视图函数

# views.py
from django.http import HttpResponse
from .models impotr *   # 导入实体类

def add_data_views(response):   # 定义视图函数
	dic = {	'name': 'Jack',
			'age': 41,
			'email': 'jack@123.com'}
   	author = Author(**dic)
   	author.save()  
	# 在Author表中插入数据,字段为name,age,email
	author.save()
	return HttpResponse('ADD OK')
2、查询操作
  • 所有的查询都要在Entry.objects 的基础上完成
  • 1、基本查询操作 all()
  • 用法:Entry.objects.all()
  • 相当于 select * from ……
  • 返回:QuerySet (查询结果集 )
# urls.py
urlpatterns = [url(r'^select_data/$', select_data_views)]  # 配置视图函数

# views.py
from django.shortcuts import render
from django.http import HttpResponse
from .models impotr *   # 导入实体类

def select_data_views(request):   # 定义视图函数
	data = Author.objects.all()
	print(data)
	# <QuerySet [<Author: Author object (1)>, <Author: Author object (2)>]>
	# 查询Author表中的所有数据
	return render(request, 'show_data.html', locals())
	# locals() 就是将data封装成一个字典传到show_data.html中
<body>
	{% for author in data %}
		<p>id:{{author.id}}</p>
		<p>name:{{author.name}}</p>
		<p>age:{{author.age}}</p>
		<p>email:{{author.email}}</p>
	{% endfor %}
	<!-- 循环取查询结果,并展示各字段的值 -->
</body>
  • 2、基本查询操作 all().values(‘列名’) django2版本支持多列查询
  • 用法:entry.all().values(‘name’)
  • 相当于 select name from ……
  • 作用:查询所有记录的某一项的值
  • 3、基本查询操作 all().values_list(‘列名1’,‘列名2’) django1版本支持,2版本不支持
  • 用法:entry.all().values_list(‘name’,‘age’)
  • 相当于 select name,age from ……
def select_data_views(request):  
	data = Author.objects.all().values('name','age')  # django 2版本写法
	data = Author.objects.all().values_list('name','age') #django 1版本写法
	return render(request, 'show_data.html', locals())
  • 4、基本查询操作 get()
  • 只能返回一条记录
  • 如果查询返回多条记录,则报错
  • 用法:entry.objects.get(id=4,name=‘张三’)
  • 相当于:select * from …… where id=4 and name=‘张三’
def select_data_views(request):  
	data = Author.objects.get(id=3)
	return render(request, 'show_data.html', locals())
  • 5、基本查询操作 exclude()
  • 作用:对给定的条件取反
  • 用法:entry.objects.exclude(id=3,age=27)
  • 相当于:select * from …… where not (id=3 and age=27)
  • 6、基本查询操作 order_by()
  • 作用:排序
  • 用法:entry.objects.order_by(‘name’,’-age’)
  • 相当于:select * from …… order by name,age desc
  • 默认为升序排序,需要降序排列时,只需要在列名前加“-”号
  • 7、filter()
  • 根据自定义条件查询结果集,可以是一个,也可以是多个,如果是多个用逗号隔开
  • 如果条件是多个,内部用 AND 进行连接
  • 使用Entry的属性作为filter()的条件
  • 用法:author.objects.filter(id=1)
  • 相当于:select * form author where id=1
  • author.objects.filter(id=1,name=‘Sam’)
  • 相当于:select * from author where id=1 and name=‘Sam’
  • 使用 Filed Lookups(查询谓词)
  • __exact:等值判断
  • Entry.objects.get(id__exact=14)
    Entry.objects.get(id__exact=None)
  • SELECT … WHERE id = 14;
    SELECT … WHERE id IS NULL;

Filed Lookups参考文档

3、修改操作
  • 1、修改单个对象
  • 1、通过get()得到要修改的实体对象
  • 2、通过实体对象修改属性值
  • 3、再通过实体对象的save()函数,实现保存
from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect

def select_data_views(request):
    data_list = Author.objects.all()
    return render(request, 'show_author.html',locals())
    
def updata_views(request):
    author = Author.objects.get(id=1)
    author.name = 'Jame'
    author.save()
    # 跳转到select_data_views的视图,请求转发,url为localhost:8000/music/updata_data
    # return select_data_views(request)
    
    # 使用重定向的方式完成视图的跳转,url为localhost:8000/music/select_data
    return HttpResponseRedirect('/music/select_data/')
  • 2、批量修改(修改查询结果集)
  • 调用update()函数
  • Author.objects.all().update(属性=值,……)

请求的转发流程图(updata将request转发给select,url地址不变)


浏览器 updata_views select_data_views request select_data_views(request) response response 浏览器 updata_views select_data_views


重定向流程图(浏览器发送了两次request,url地址改变)


浏览器 updata_views select_data_views request HttpResponseRedirect() request response 浏览器 updata_views select_data_views


4、删除操作
  • 1、删除单个对象
  • obj = Author.objects.get(id=1)
  • obj.delete()
  • 2、批量删除
  • obj= Author.objects.all()
  • obj.delete()
5、F和Q操作
  • 1、F()操作
  • 作用:在执行中获取某列的值
  • 语法:F(‘列名’)
from django.db.models import F
Author.objects.all().update(age = F('age') + 10)	# 所有人的年龄加10
# update author set age = age+10
  • 2、Q()操作
  • 作用:条件的关联,实现或的操作(or)
  • 语法:Q(‘条件’)
from django.db.models import Q
Author.objects.filter(Q(age__gt=30)|Q(name='Sam'))
# select * from author where age>30 or name='Sam'
6、原生数据库操作
  • 1、查询
  • 函数:raw()
  • 语法:Entry.objects.raw(sql)
def raw_views(request):
	sql = "select * from index_author where email like '%%@qq.com';"
	author_list = Author.objects.raw(sql)
	return render(request, 'raw.html', locals())
  • 2、增删改(很少用)
def sql(request):
	with connection.cursor() as cursor:  # 数据库游标
		sql = 'delect from author;'
		cursor.execute(sql)
	return render(request, 'show_author.html',locals())



https://www.xamrdz.com/lan/55k1939548.html

相关文章: