前 Djangoは少しノート、3-学生管理データベースを学習① 私たちは、最も基本的な単一テーブルの操作を述べました。多くの場合に多く、多くは実際にあります。
これは、手術台に接続されたマルチテーブルに関する。
理解:フォームが送信されたフォーム、ページの内容が更新されます。
1.ビュー
mysqlの> SELECT * FROM学生LEFT JOINのクラスをON student.`class_ID` = class.`id`。 + - - + ----------- + ---------- + ------ + -------------- --- + | ID | 名前 | CLASS_ID | ID | タイトル | + - - + ----------- + ---------- + ------ + -------------- --- + | 1 |张英杰 | 9 | 9 |全栈12期1222 | + -- + ----------- + ---------- + ------ + ----------------- + 1行に セット(0.00 秒)
MySQLの> SELECT student.id、student.name、学生左からclass.titleはstudent.`class_ID` = cllass.`id` ONクラスに参加します。
+ ---- + ----------- + ----------------- +
| ID | 名前| タイトル|
+ ---- + ----------- + ----------------- +
| 1 | 张英杰| 全栈12期1222 |
+ ---- + ----------- + ----------------- +
セットにおける1行(0.00秒)
だから、データベース内のステートメントに置き換えることができます。
#展示学生 デフ学生(リクエスト): インポートpymysql CONN = pymysql.connect(ホスト= ' 10.0.4.x '、ポート= 3306、ユーザー= ' ルート'は、passwd = '123 @#123 '、DB = " oldboys '文字セット= ' UTF8 " ) カーソル = conn.cursor(カーソル= pymysql.cursors.DictCursor) cursor.execute(「学生左からSELECT student.id、student.name、class.title student.`class_ID` ONクラスに参加= class.`id` ") student_list= cursor.fetchall() ()cursor.close はconn.close() リターン(要求、レンダリング' students.html ' { ' student_list ':student_listを})
2.追加
add_student.html:ページは、ユーザーが自分のクラスを追加することを可能にするときは、<選択> <オプション>タグが実装され、ドロップダウンボックスを設定することができます
<!DOCTYPE HTML > < HTML LANG = "EN" > < 頭> < メタ文字コード= "UTF-8" > < タイトル>添加学生</ タイトル> </ ヘッド> < 身体> < H1 >增加学生</ H1 > < フォームメソッド= "POST" アクション= "/ add_student /" > < P >学生姓名<= "名前" /> </ P > < P > 所属班级: < 選択名= "CLASS_ID" > {class_list%で行の%} < オプション値= "{{row.id}}" > {{行。タイトル}} </ オプション> > {%ENDFOR%} </ 選択> </ P > < 入力タイプ= "提出" 値= "提交" > </ 構成> </ ボディ> </ htmlの>
注:ラベルを選択し、学生がキーとして名前を提出して、値として提出するCLASS_ID、CLASS_IDプロパティに参加しました。
views.pyはadd_student機能を追加しました:
... #、学生を追加するには、ドロップダウンボックスの DEFのadd_student(要求): IFは == request.method 「GETを」:
データベースによって埋め位add_student.htmlにクラス名]ドロップダウンボックスの値を抽出するために インポートpymysql でCONN =ホストpymysql.connect(= ' 10.0.4.x '、ポート= 3306、=ユーザー' ルート'は、passwdは= ' #123 @ 123!'、DB = ' oldboys '、文字セットが= ' UTF8 ' ) カーソル = conn.cursor(=カーソル pymysql。 cursors.DictCursor) cursor.execute(" クラスから選択ID、タイトル" ) class_list = cursor.fetchall() ()cursor.close はconn.close() リターンレンダリング(要求、' add_student.html ' { ' class_list ' :class_listを}) 他: 名 = request.POST.get(' 名前' ) CLASS_ID = request.POST.get(' CLASS_ID ' ) #提交至数据库 輸入pymysql CONN = pymysql.connect(ホスト= " 10.0.4.x '、ポート= 3306、ユーザー= ' ルート'は、passwd = ' #123 @ 123!'、DB = ' oldboys '、文字セット= ' UTF8 ' ) カーソル = CONN .CURSOR(カーソル= pymysql.cursors.DictCursor) cursor.execute(" 学生への挿入(名前、CLASS_ID)値(%S、%S)" 、[名前、CLASS_ID]) conn.commit() cursor.close() conn.close() の戻りリダイレクト(' /学生/ ')
実際には、すべての時間があまりにもあなたがutilsのディレクトリsqlheper.pyという名前のパッケージにそれらを置くことができ、データベースの操作が面倒
sqlheper.py
import pymysql #fetchall def get_list(sql,args): conn = pymysql.connect(host='10.0.4.x', port=3306, user='root', passwd='123!@#123', db='oldboys',charset='utf8') cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) cursor.execute(sql,args) result = cursor.fetchall() cursor.close() conn.close() return result #fetchone def get_one(sql,args): conn = pymysql.connect(host='10.0.4.x', port=3306, user='root', passwd='123!@#123', db='oldboys',charset='utf8') cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) cursor.execute(sql,args) result = cursor.fetchone() cursor.close() conn.close() return result #commit def modify(sql,args): conn = pymysql.connect(host='10.0.4.x', port=3306, user='root', passwd='123!@#123', db='oldboys',charset='utf8') cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) cursor.execute(sql,args) conn.commit() cursor.close() conn.close()
Ajax (jQuery)
“页面不刷新的情况下偷偷提交数据”