Python+Django+SAE系列课程13-MySQL记录的添删改
Python+Django+SAE系列教程13-----MySQL记录的添\删\改 建立了数据库后,我们就来做一个简单的表( person_classroom )的添加、删除、修改的操作。 首先我们建立一个添加的页面的模板 Classroom_Add.html(添加的表单) 并把它放在 Bidding\templates\person
Python+Django+SAE系列教程13-----MySQL记录的添\删\改建立了数据库后,我们就来做一个简单的表(person_classroom)的添加、删除、修改的操作。
首先我们建立一个添加的页面的模板Classroom_Add.html(添加的表单)并把它放在Bidding\templates\person中:
Classroom_Add.html:
<title>数据库操作简单表的添加</title> <h1 id="这里是Classroom的添加页面">这里是Classroom的添加页面</h1> {% if error %} <p style="color: red;">请输入班级名称和导师姓名</p> {% endif %}
Classroom_Add_results.html:
<title>查询用户结果页</title>
班级:{{name}}添加成功 ! |
点击返回 |
然后建立对应的view,我们修改person/views.py 文件
Views.py:
# -*- coding: utf-8 -*- from django.shortcuts import render_to_response from django.db import connection,transaction from person.models import * def ClassroonAdd(request): if 'name' in request.GET and request.GET['name'] and 'tutor' in request.GET and request.GET['tutor']: name = request.GET['name'] tutor = request.GET['tutor'] cursor=connection.cursor() sql='insert into person_classroom (name,tutor) values (\''+name+'\',\''+tutor+'\')' cursor.execute(sql) transaction.commit_unless_managed() cursor.close() return render_to_response('person/Classroom_Add_results.html', {'name': name}) else: return render_to_response('person/Classroom_Add.html', {'error': True})
在修改一下urls.py文件:
from django.conf.urls import patterns, include, url # Uncomment the next two lines to enable the admin: # from django.contrib import admin # admin.autodiscover() urlpatterns = patterns('', # Examples: # url(r'^$', 'Bidding.views.home', name='home'), # url(r'^Bidding/', include('Bidding.foo.urls')), # Uncomment the admin/doc line below to enable admin documentation: # url(r'^admin/doc/', include('django.contrib.admindocs.urls')), # Uncomment the next line to enable the admin: # url(r'^admin/', include(admin.site.urls)), url(r'^hello/$', 'Bidding.views.hello'), url(r'^time/$', 'Bidding.views.current_datetime'), url(r'^time/plus/(\d{1,2})/$', 'Bidding.views.hours_ahead'), url(r'^hello_base/$', 'Bidding.views.hello_base'), url(r'^request_test/$', 'Bidding.views.request_test'), url(r'^UsersSearch/$', 'Bidding.Users.views.search_form'), url(r'^search/$', 'Bidding.Users.views.search'), url(r'^ClassRoom/add/$', 'person.views.ClassroonAdd'), )
这时我们的添加就做好了,访问一下classroom/add这个 页面,就可以看到结果了。
不过上面我们所说的办法是执行一个原始的sql语句,这个方式其实并不是Django推荐的,我们可以直接使用models操作数据库的方法,改造一下ClassroomAdd这个视图:
def ClassroonAdd(request): if 'name' in request.GET and request.GET['name'] and 'tutor' in request.GET and request.GET['tutor']: name = request.GET['name'] tutor = request.GET['tutor'] c = ClassRoom(name=name,tutor=tutor) c.save() return render_to_response('person/Classroom_Add_results.html', {'name': name}) else: return render_to_response('person/Classroom_Add.html', {'error': True})
这样的方法即简单,有不用我们很多sql的语法,并且最重要的是如果更换数据库类型(sqlserver->oracle),也不会因为受sql语法不一致的影响。
在接下来,我们来做一个列表页,把数据库中的Classroom表的记录以一个表格的形式显示出来。还是从模板先入手,建立一个Classroom_List.html,放入Bidding\templates\person文件夹下:
Classroom_List.html:
<title>数据库操作简单表的添加</title> <h1 id="这里是Classroom的管理页面">这里是Classroom的管理页面</h1>
序号 | 班级名称 | 导师姓名 |
{{ myclass.id }} | {{ myclass.name }} | {{ myclass.tutor }} |
添加视图:
# -*- coding: utf-8 -*- from django.shortcuts import render_to_response from django.db import connection,transaction from person.models import * def ClassroonAdd(request): if 'name' in request.GET and request.GET['name'] and 'tutor' in request.GET and request.GET['tutor']: name = request.GET['name'] tutor = request.GET['tutor'] cursor=connection.cursor() sql='insert into person_classroom (name,tutor) values (\''+name+'\',\''+tutor+'\')' cursor.execute(sql) transaction.commit_unless_managed() cursor.close() return render_to_response('person/Classroom_Add_results.html', {'name': name}) else: return render_to_response('person/Classroom_Add.html', {'error': True}) def ClassroonAdd(request): if 'name' in request.GET and request.GET['name'] and 'tutor' in request.GET and request.GET['tutor']: name = request.GET['name'] tutor = request.GET['tutor'] c = ClassRoom(name=name,tutor=tutor) c.save() return render_to_response('person/Classroom_Add_results.html', {'name': name}) else: return render_to_response('person/Classroom_Add.html', {'error': True}) def ClassroonList(request): cursor=connection.cursor() sql='select id,name,tutor from person_classroom' ClassroonList=ClassRoom.objects.raw(sql) return render_to_response('person/Classroom_List.html', {'ClassroonList': ClassroonList})
配置urls.py:
from django.conf.urls import patterns, include, url # Uncomment the next two lines to enable the admin: # from django.contrib import admin # admin.autodiscover() urlpatterns = patterns('', # Examples: # url(r'^$', 'Bidding.views.home', name='home'), # url(r'^Bidding/', include('Bidding.foo.urls')), # Uncomment the admin/doc line below to enable admin documentation: # url(r'^admin/doc/', include('django.contrib.admindocs.urls')), # Uncomment the next line to enable the admin: # url(r'^admin/', include(admin.site.urls)), url(r'^hello/$', 'Bidding.views.hello'), url(r'^time/$', 'Bidding.views.current_datetime'), url(r'^time/plus/(\d{1,2})/$', 'Bidding.views.hours_ahead'), url(r'^hello_base/$', 'Bidding.views.hello_base'), url(r'^request_test/$', 'Bidding.views.request_test'), url(r'^UsersSearch/$', 'Bidding.Users.views.search_form'), url(r'^search/$', 'Bidding.Users.views.search'), url(r'^ClassRoom/add/$', 'person.views.ClassroonAdd'), url(r'^ClassRoom/list/$', 'person.views.ClassroonList'), )
如同上述讨论的一样,我们现在的视图执行的是一个原始的sql,现在我们需要用models来修改一下:
def ClassroonList(request): cursor=connection.cursor() ClassroonList=ClassRoom.objects.all() #ClassroonList=ClassRoom.objects.filter(name__icontains='大') return render_to_response('person/Classroom_List.html', {'ClassroonList': ClassroonList})
如果需要执行where或者order by等操作可以这样:
ClassroonList=ClassRoom.objects.filter(name__icontains='大').order_by(‘name’)
这里还有很多关于选择的内容以后我们逐渐会介绍到。
做完了列表页,我们在来做一个修改的页面,思路是这样的:在列表页中的每一行的后面添加一列“修改”按钮,点击按钮后跳转到修改页面,首先以此条记录的主键专递到修改页面,在修改页面中要先读取出数据库中的信息,然后点击确定按钮以后执行修改操作。
我们首先来修改这个管理页面的模板:
Classroom_List.html:
<title>数据库操作简单表的添加</title> <h1 id="这里是Classroom的管理页面">这里是Classroom的管理页面</h1>
序号 | 班级名称 | 导师姓名 | 操作 |
{{ myclass.id }} | {{ myclass.name }} | {{ myclass.tutor }} |
建立一个Classroom_Modify.html模板,把它放在Bidding\templates\person文件夹下
Classroom_Modify.html:
<title>数据库操作简单表的修改</title> <h1 id="这里是Classroom-name-的修改页面">这里是Classroom--{{name}}的修改页面</h1> {% if error %} <p style="color: red;">请输入班级名称和导师姓名</p> {% endif %}
Classroom_Modify_results.html:
<title>查询用户结果页</title>
修改前 | 修改后 | |
班级名称: | {{old_name}} | {{new_name}} |
导师姓名: | {{old_tutor}} | {{new_tutor}} |
修改成功! | ||
点击返回 |
添加视图:
def ClassroonModify(request,id1): cursor=connection.cursor() sql='select id,name,tutor from person_classroom where id='+id1 ClassroonList=ClassRoom.objects.raw(sql) old_name = ClassroonList[0].name old_tutor = ClassroonList[0].tutor if 'name' in request.GET and request.GET['name'] and 'tutor' in request.GET and request.GET['tutor']: new_name = request.GET['name'] new_tutor = request.GET['tutor'] cursor=connection.cursor() sql='update person_classroom set name=\''+new_name+'\',tutor=\''+new_tutor+'\' where id=\''+id1+'\'' cursor.execute(sql) transaction.commit_unless_managed() cursor.close() return render_to_response('person/Classroom_Modify_results.html', {'old_name': old_name,'old_tutor':old_tutor,'new_name':new_name,'new_tutor':new_tutor}) else: return render_to_response('person/Classroom_Modify.html', {'error': True,'id':id1,'name':old_name,'tutor':old_tutor})
编辑urls.py,这里面需要注意的是正则的写法,这个之前的章节已经说过了,这里我们可以再复习一遍:
from django.conf.urls import patterns, include, url # Uncomment the next two lines to enable the admin: # from django.contrib import admin # admin.autodiscover() urlpatterns = patterns('', # Examples: # url(r'^$', 'Bidding.views.home', name='home'), # url(r'^Bidding/', include('Bidding.foo.urls')), # Uncomment the admin/doc line below to enable admin documentation: # url(r'^admin/doc/', include('django.contrib.admindocs.urls')), # Uncomment the next line to enable the admin: # url(r'^admin/', include(admin.site.urls)), url(r'^hello/$', 'Bidding.views.hello'), url(r'^time/$', 'Bidding.views.current_datetime'), url(r'^time/plus/(\d{1,2})/$', 'Bidding.views.hours_ahead'), url(r'^hello_base/$', 'Bidding.views.hello_base'), url(r'^request_test/$', 'Bidding.views.request_test'), url(r'^UsersSearch/$', 'Bidding.Users.views.search_form'), url(r'^search/$', 'Bidding.Users.views.search'), url(r'^ClassRoom/add/$', 'person.views.ClassroonAdd'), url(r'^ClassRoom/list/$', 'person.views.ClassroonList'), url(r'^ClassRoom/modify/(\d+)/$', 'person.views.ClassroonModify'), )
如同添加时候的问题,我们这里面使用的仍然是最原始的sql语句,我们同样可以给他修改成为model的方式:
def ClassroonModify(request,id1): cursor=connection.cursor() Classroon=ClassRoom.objects.get(id=id1) old_name = Classroon.name old_tutor = Classroon.tutor cursor.close() if 'name' in request.GET and request.GET['name'] and 'tutor' in request.GET and request.GET['tutor']: new_name = request.GET['name'] new_tutor = request.GET['tutor'] Classroon.name=new_name Classroon.tutor=new_tutor Classroon.save() return render_to_response('person/Classroom_Modify_results.html', {'old_name': old_name,'old_tutor':old_tutor,'new_name':new_name,'new_tutor':new_tutor}) else: return render_to_response('person/Classroom_Modify.html', {'error': True,'id':id1,'name':old_name,'tutor':old_tutor})
这样看起来是不是简便多了?我们打开 页面看看效果吧 :
接下来我们来做删除的功能,首先修改列表页的模板,加入一列删除按钮:
<title>数据库操作简单表的添加</title> <h1 id="这里是Classroom的管理页面">这里是Classroom的管理页面</h1>
序号 | 班级名称 | 导师姓名 | 操作 |
{{ myclass.id }} | {{ myclass.name }} | {{ myclass.tutor }} |
Classroom_Delete_results.html:
<title>查询用户结果页</title>
班级:{{name}}删除成功 ! |
点击返回 |
修改视图:
def ClassroonDelete(request,id1): cursor=connection.cursor() Classroon=ClassRoom.objects.get(id=id1) old_name = Classroon.name Classroon.delete() ClassroonList=ClassRoom.objects.all() cursor.close() return render_to_response('person/Classroom_Delete_results.html',{'name':old_name})
配置urls.py:
from django.conf.urls import patterns, include, url # Uncomment the next two lines to enable the admin: # from django.contrib import admin # admin.autodiscover() urlpatterns = patterns('', # Examples: # url(r'^$', 'Bidding.views.home', name='home'), # url(r'^Bidding/', include('Bidding.foo.urls')), # Uncomment the admin/doc line below to enable admin documentation: # url(r'^admin/doc/', include('django.contrib.admindocs.urls')), # Uncomment the next line to enable the admin: # url(r'^admin/', include(admin.site.urls)), url(r'^hello/$', 'Bidding.views.hello'), url(r'^time/$', 'Bidding.views.current_datetime'), url(r'^time/plus/(\d{1,2})/$', 'Bidding.views.hours_ahead'), url(r'^hello_base/$', 'Bidding.views.hello_base'), url(r'^request_test/$', 'Bidding.views.request_test'), url(r'^UsersSearch/$', 'Bidding.Users.views.search_form'), url(r'^search/$', 'Bidding.Users.views.search'), url(r'^ClassRoom/add/$', 'person.views.ClassroonAdd'), url(r'^ClassRoom/list/$', 'person.views.ClassroonList'), url(r'^ClassRoom/modify/(\d+)/$', 'person.views.ClassroonModify'), url(r'^ClassRoom/delete/(\d+)/$', 'person.views.ClassroonDelete'), )
到此,我们就做好了一个简单的表的添加、删除、修改的操作。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

小米15系列预计将于10月份正式发布,其全系列代号已在外媒MiCode代码库中曝光。其中,旗舰级小米15Ultra代号为"Xuanyuan"(意为"轩辕"),此名源自中国神话中的黄帝,象征着尊贵。小米15的代号为"Dada",而小米15Pro则以"Haotian"(意为"昊天")为名。小米15SPro内部代号为"dijun",暗指《山海经》创世神帝俊。小米15Ultra系列涵盖

自去年华为Mate60系列开售以来,我个人就一直将Mate60Pro作为主力机使用。在将近一年的时间里,华为Mate60Pro经过多次OTA升级,综合体验有了显着提升,给人一种常用常新的感觉。比如近期,华为Mate60系列就再度迎来了影像功能的重磅升级。首先是新增AI消除功能,可以智能消除路人、杂物并对空白部分进行自动补充;其次是主摄色准、长焦清晰度均有明显升级。考虑到现在是开学季,华为Mate60系列还推出了秋日礼遇活动:购机可享至高800元优惠,入手价低至4999元。常用常新的产品力加上超值

iPhone15与iPhone15Pro在今日正式发表,不过Pro系列作为高端机型,除了价格更高以外,也有许多专属功能,消费者在购买前得先认清差异,才不会在买了iPhone15后,才发现有些功能只有Pro系列才能用。显示器尽管搭载了相同的显示面板,但ProMotion自动适应更新频率技术与永远显示功能仍然是Pro系列专属。其余无论是在解析度、对比度、峰值亮度等层面,iPhone15与iPhone15Pro系列皆相同。动作按钮动作按钮目前是iPhone15Pro系列的专属设计,可以让使用者个人化自

很多想入手内存条的用户都想知道,影驰名人堂这个品牌的内存条,有哪几个系列,想要了解一下,其实这个品牌目前有三个系列,分别是HOFEXTREME限量版,HOFEXTREME,HOFPRORGB。名人堂内存有哪几个系列:答:HOFEXTREME限量版,HOFEXTREME,HOFPRORGB。这三款内存条都是性能比较好的,其中HOFEXTREME限量版是性能最好的,HOFPRORGB相对前面的两款,稍微弱一些但性能也很不错。名人堂内存拓展介绍:1、采用三星B-die颗粒,是内存颗粒中的王者,使用寿命

线性代数的重点,已经有人帮忙画好了。一共只有12页纸,而且一半都是图解,小白也不用担心看不懂!现在,这份笔记在GitHub已经获得了4k+次星标,还登上了热榜。图片这份笔记名为《线性代数的艺术》,是基于MIT大牛GilbertStrang教授的《每个人的线性代数》制作的。图片日本学者KenjiHiranabe把这部368页的巨著浓缩成图解,制成了这套笔记并免费开源,后被国内网友kfliu翻译成了中文。结果不仅在GitHub上反响很好,还得到了原作者的肯定,被收录进了原书介绍页面的interest

Apple于9月13日凌晨1时发布会将会有4款新iPhone登场,分别为iPhone15、15Plus、15Pro及15ProMax。高阶的iPhone15Pro和ProMax将使用全新设计,侧边材质从不锈钢变更为钛金属。Pro系列的颜色有灰、黑、深蓝、白等选项。iPhone15Pro和ProMax的屏幕今年会较去年的14Pro及14ProMax稍微大一些。这一变化是由于苹果采用了名为LIPO(低注射压力包覆成型)的新工艺技术,使得屏幕边框厚度减少了约三分之一。高阶型号将换用具有磨砂质感的钛金属

中公教育是一款专注于职业教育知识的软件,旨在为广大用户提供全面、丰富的学习资源。无论您是即将面临职业考试,还是希望提升职业技能,中公教育都能满足您的需求。我们的知识内容涵盖各种类型和阶段,主要以课程形式呈现,帮助用户系统地学习和掌握所需知识。那么究竟该如何在中公教育App中购买自己所需要的网课呢,还不了解的用户们就请继续阅读下文吧!中公教育怎么买网课?1、进入手机的中公教育,输入关键字。2、选择网课类型。3、点击右下角的立即购买。4、最后选择支付方式,点击确认支付即可。

Java并发集合是Java编程语言中用于管理并发访问共享数据的集合类库。 Java并发集合提供了多种数据结构,如队列、栈、映射和集合,这些数据结构都是线程安全的,可以在多线程环境中使用。学习Java并发集合,可以参考以下书籍、课程和在线教程:书籍:《Java并发编程实战》这是Java并发编程领域的一本经典著作,由BrianGoetz和TimPeierls合着。本书详细介绍了Java并发集合的使用方法和技巧,涵盖了线程安全、锁、原子操作、内存可见性等内容。 《Java并发编程艺术》这本书由DougLe
