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 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Xiaomi Mi 15シリーズは10月に正式リリースされる予定で、その全シリーズのコードネームが海外メディアのMiCodeコードベースで公開されている。その中でもフラッグシップモデルであるXiaomi Mi 15 Ultraのコードネームは「Xuanyuan」(「玄源」の意味)です。この名前は中国神話に登場する高貴さを象徴する黄帝に由来しています。 Xiaomi 15のコードネームは「Dada」、Xiaomi 15Proのコード名は「Haotian」(「好天」の意味)です。 Xiaomi Mi 15S Proの内部コード名は「dijun」で、「山と海の古典」の創造神である淳皇帝を暗示しています。 Xiaomi 15Ultra シリーズのカバー

昨年Huawei Mate60シリーズが発売されて以来、個人的にはMate60Proをメインで使っています。ほぼ1年の間に、Huawei Mate60Proは複数のOTAアップグレードを受け、全体的なエクスペリエンスが大幅に向上し、人々に常に新しい感覚を与えました。たとえば、最近、Huawei Mate60 シリーズは再びイメージング機能の大幅なアップグレードを受けました。 1 つ目は、新しい AI 除去機能で、通行人やゴミをインテリジェントに除去し、空白領域を自動的に埋めることができます。2 つ目は、メインカメラの色の精度と望遠の鮮明さが大幅に向上しました。新学期シーズンであることを考慮して、Huawei Mate60シリーズは秋のプロモーションも開始しました。携帯電話の購入時に最大800元の割引が受けられ、開始価格は4,999元という低価格です。よく使われる、価値の高い新製品が多い

本日、iPhone15とiPhone15Proが正式に発売されましたが、Proシリーズはハイエンドモデルとして価格が高いだけでなく、独自の機能も多く搭載されており、購入後に問題が発生しないように、消費者は購入前に違いを認識する必要があります。 iPhone15. Proシリーズのみの機能です。これらのモニターには同じ表示パネルが装備されていますが、ProMotion 自動適応更新頻度テクノロジーと常時表示機能は、依然として Pro シリーズ専用です。残りのiPhone 15およびiPhone 15 Proシリーズは、解像度、コントラスト、ピーク輝度などの点で同じです。アクションボタン アクションボタンは現在、iPhone 15 Pro シリーズ専用のデザインとなっており、ユーザーがカスタマイズできます。

メモリ モジュールを購入したいユーザーの多くは、GALAX 殿堂ブランドのメモリ モジュールがどのようなシリーズであるかを知りたいと考えていますが、実際、このブランドには現在、HOFEXTREME 限定版、HOFEXTREME、HOFPRORGB の 3 シリーズがあります。殿堂入り記念シリーズとは: A: HOFEXTREME 限定版、HOFEXTREME、HOFPRORGB。これら 3 つのメモリ モジュールはどれも比較的優れたパフォーマンスを持っていますが、その中でも HOFEXTREME 限定版のパフォーマンスが最も優れており、前の 2 つのモデルと比較すると、HOFPRORGB はわずかに性能が劣りますが、パフォーマンスも非常に優れています。殿堂入りメモリ拡張の紹介: 1. メモリ粒子の王様であり、長寿命である Samsung B-die 粒子を使用します。

線形代数の要点はすでに誰かによって描かれています。全12ページで半分はイラストなので、初心者でもわからなくても大丈夫!現在、このノートは GitHub で 4,000 以上のスターを獲得し、ホット リストにも載っています。写真のメモは「The Art of Linear Algebra」と呼ばれ、MIT の専門家ギルバート・ストラング教授による「Everyone のための線形代数」に基づいています。写真 日本語学者の平鍋健二氏は、この 368 ページの傑作をイラストに凝縮し、このメモのセットを作成して無料でオープンソースにし、後に国内のネチズン kfliu によって中国語に翻訳されました。その結果は GitHub 上で好評を博しただけでなく、原作者にも認められ、原作本の紹介ページにも掲載されました。

Appleは9月13日午前1時に、iPhone 15、15 Plus、15 Pro、15 Pro Maxという4つの新しいiPhoneモデルを発売します。上位モデルのiPhone 15 ProとPro Maxでは新デザインが採用され、側面素材がステンレススチールからチタンに変更されます。 Pro シリーズのカラーには、グレー、ブラック、ダークブルー、ホワイトなどのオプションがあります。今年のiPhone 15 ProとPro Maxの画面は、昨年の14 Proと14 Pro Maxよりもわずかに大きくなります。この変更は、Apple が LIPO (低射出圧力オーバーモールディング) と呼ばれる新しいプロセス技術を採用したことによるもので、これによりスクリーン フレームの厚さが約 3 分の 1 に減少します。ハイエンドモデルはマットな質感のチタンに変更

Zhonggong Education は、職業教育の知識に焦点を当て、ユーザーに包括的で豊富な学習リソースを提供することを目的としたソフトウェアです。職業試験を受けようとしている場合でも、職業スキルを向上させたい場合でも、中国公教育はあなたのニーズを満たすことができます。知識内容はさまざまな種類と段階に分かれており、必要な知識を体系的に学び習得できるよう、主にコース形式で提供しています。では、中国公教育アプリで必要なオンライン コースを購入するにはどうすればよいでしょうか? まだ知らないユーザーは、以下を読み続けてください。 China Public Education からオンライン コースを購入するにはどうすればよいですか? 1. 携帯電話で「中国公教育」と入力し、キーワードを入力します。 2. オンラインコースのタイプを選択します。 3. 右下隅にある「今すぐ購入」をクリックします。 4. 最後に、支払い方法を選択し、クリックして支払いを確認します。

Java 同時コレクションは、共有データへの同時アクセスを管理するために使用される Java プログラミング言語のコレクション クラス ライブラリです。 Java 同時コレクションは、キュー、スタック、マップ、コレクションなどのさまざまなデータ構造を提供します。これらのデータ構造はスレッドセーフであり、マルチスレッド環境で使用できます。 Java 並行コレクションを学習するには、次の書籍、コース、およびオンライン チュートリアルを参照してください。 書籍: 『Java Concurrent Programming in Practice』 これは、Brian Goetz と Tim Peierls の共著で、Java 並行プログラミングの分野における古典的な書籍です。 。この本では、スレッド セーフ、ロック、アトミック操作、メモリの可視性などをカバーする、Java 同時コレクションの使用方法とテクニックを詳細に紹介します。 『The Art of Concurrent Programming in Java』という本は、Doug Le によって書かれています。
