データベースとDjangoのモデルの相互作用

データベース関連のアクション

modelORM技術を使用します(オブジェクトリレーショナルマッピングオブジェクト・リレーショナル・マッピング)

  • ビジネス・ロジック解耦合(object.save()object.delete()、など)
  • リレーショナルデータベース(を通じて、DDLを使用してmodels定义実装定義データベーステーブル。)

MySQLの接続ドライバ

  • あるmysqlclient

    • パイソン2、図3は、直接使用することができ
    • 致命的な欠陥は:インストール要件は、MySQLを持って、コンフィギュレーションファイルは、指定した場所に存在している必要があります
  • python-mysqlの

    • python2良いサポート
    • python3サポートされていません
  • pymysql

    • python2、のpython3サポート
    • また、ライブラリの前面に変装することができます。

データベーステーブルを作成します。

私たちは、修正App/models.pyファイルを次のように、コードは次のとおりです。

# models.py
from django.db import models
 
class Student(models.Model):
    s_name = models.CharField(max_length=16)    # 设置最大长度16
    s_age = models.IntegerField(default=1)      # 设置默认值1

上記のクラスの代表数据库表名クラスフィールド内、models.Model継承し、CharFieldです(等価VARCHAR)のDateField(等価日時)として、MAX_LENGTHパラメータは、長さを定義することによって、データテーブルのフィールド(名前)、データ型を表します。

これは、モデルで定義されており、データベースのテーブルを生成しません、必要な迁移

移行

移行の概念は:モデルがデータベースにマッピングされます。

(1)発生マイグレーションで、命令行操作:

$ python manage.py makemigrations		## 生成迁移文件
或
$ python manage.py makemigrations	[django的app名]## 针对某一个django模型

出力:

## 运行结果
Migrations for 'two':
  two\migrations\0001_initial.py
    - Create model Student

結果のファイルの移行対応でアプリのフォルダの移行ファイルの下で:
ここに画像を挿入説明

(2)移行を行うが、それはデータベースへのファイルのマイグレーションマッピングする対応するデータベーステーブルを作成し、:

$ python manage.py migrate   # 创建表结构

成分表の構造:应用名_类名(例:app_test)。
注:私たちはモデルがテーブルに主キーを設定する必要はありませんが、Djangoは自動的に主キーとしてIDを追加しますが。

データを追加します

まず、urls.pyアドオン

from django.conf.urls import url
from App import views

urlpatterns = [
    url(r'^index/',views.index),
    url(r'^addstudent/',views.addStudent) # 添加此项
]

追加データはで、オブジェクトを作成し、その後、セーブ機能SQL INSERTと同等のものを実行する必要がmodels.pyに追加します

import random
from django.http import HttpResponse

# Create your views here.
from two.models import Student

def addStudent(request):
    stu = Student()
    stu.s_name = 'Jerry %d' % random.randrange(100)
    stu.s_age = 10
    stu.save()
    return HttpResponse('添加成功')

クエリデータ

まず、urls.pyアドオン

from django.conf.urls import url
from App import views

urlpatterns = [
    url(r'^index/',views.index),
    url(r'^addstudent/',views.addStudent),
    url(r'^getstudent/',views.getstudent),  	# 添加此项
]

views.pyに追加

import random
from django.http import HttpResponse

# Create your views here.
from two.models import Student

def getstudent(request):
    students = Student.objects.all()
    for student in students:
        print(student.s_name)

    #return HttpResponse('查找成功')
    context = {
        "hobby":"Play Games",
        "students":students			# 查询出来的student_list
    }	
    return render(request,'student_list.html',context)

templates追加student_list.html

この用途の模板语法ループのための、浏览器ジャンゴ、テンプレート構文を解決できないブラウザに送信され、HTML構文に変換されます。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>StudentList</title>
</head>
<body>
<h1>{{hobby}}</h1>						# {{}}读取后端的数据

<ul>
    {% for student in students %}
        <li>{{student.s_name}}</li>		# {{}}读取后端的数据
    {% endfor %}
</ul>
</body>
</html>

アクセス住所:
ここに画像を挿入説明

更新

まず、urls.pyアドオン

from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^updatestudent/',views.updatestudent)
]

views.pyに追加

def updatestudent(request):
    student = Student.objects.get(pk=1)
    student.s_name = 'Tom'
    student.save()

    return HttpResponse('更新成功')

ウェブサイトを訪問し、データベースを表示します。
ここに画像を挿入説明
ここに画像を挿入説明

削除

まず、urls.pyアドオン

from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^deletestudent/',views.updatestudent)
]

views.pyに追加

def deletestudent(request):
    student = Student.objects.get(pk=2)
    student.delete()

    return HttpResponse('删除成功')

アクセスアドレスとクエリのデータベース:
ここに画像を挿入説明
ここに画像を挿入説明

公開された58元の記事 ウォンの賞賛4 ビュー1940

おすすめ

転載: blog.csdn.net/weixin_43999327/article/details/104068260
おすすめ