django2.0 mysqlの次の一対のマルチ削除変更操作を実証する
この博文はdjango基礎操作に由来し、djangoの下orm対mysqlの一対の多関係モデルの基礎操作を実証することを目的としている.本実験を完了する前に,このブログの基礎構成を参照することができ,このブログを参照することができ,簡単で操作しやすい.djangoはゼロベースからsettingsを構成する.pyには次のものが含まれています.django実行成功 リソースパス構成、リンクApp、コメントcsrfの操作 リソースパスは構成されず、mysqlデータベースへのリンクを追加できます.
以下、本実験を開始する.
じっけんステップmodelsで2枚のテーブルをコードする作成 コマンドライン生成データベース、および移行ファイル コマンドライン下でmysqlデータテーブルを操作し、添削を行います!
models.pyアカウントと連絡先テーブルの作成
データベース移行の生成
データベースのorm操作
データテーブルのデータフィールドを2枚追加する操作
クエリー関連データテーブルレコード(クエリーc 1,c 2の情報、フィルタ情報)
Contactデータテーブルレコードの変更(c 2のphoneを変更)
Accountテーブルの関連レコードの削除(カスケード削除の有無を確認)
DATABASES = {
'default': {
'ENGINE':'django.db.backends.mysql', #
'NAME':'test', # ,
'HOST':'127.0.0.1', #
'PORT':3306, #
'USER':'root', # user
'PASSWORD':'123456', # password
}
}
以下、本実験を開始する.
じっけんステップ
models.pyアカウントと連絡先テーブルの作成
from django.db import models
# Create your models here.
class Account(models.Model):
user_name = models.CharField(max_length=80)
password = models.CharField(max_length= 255)
def __str__(self):
return "Account: %s"%self.user_name
class Contact(models.Model):
account = models.ForeignKey(
Account,
on_delete=models.CASCADE,
)
mobile = models.CharField(max_length=20)
def __str__(self):
return "%s, %s"%(self.account.user_name,self.mobile)
データベース移行の生成
soft Windows [ 10.0.18362.145]
(c) 2019 Microsoft Corporation。 。
C:\Users\Administrator\Desktop\ \python_file\python \ django\test02( )>python manage.py makemigrations
Migrations for 'app01':
app01\migrations\0001_initial.py
- Create model Account
- Create model Contact
C:\Users\Administrator\Desktop\ \python_file\python \ django\test02( )>python manage.py migrate
Operations to perform:
Apply all migrations: admin, app01, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying app01.0001_initial... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying sessions.0001_initial... OK
データベースのorm操作
データテーブルのデータフィールドを2枚追加する操作
In [1]: from app01 import models
In [2]: a1 = models.Account.objects.create(user_name='Rose')
In [3]: c1 = models.Contact.objects.create(account=a1,mobile='123456')
In [4]: c1.save
Out[4]: <bound method Model.save of <Contact: Rose, 123456>>
In [5]: c1.save()
In [6]: c2 = models.Contact.objects.create(account=a1,mobile='654321')
In [7]: c2.save()
In [8]:
クエリー関連データテーブルレコード(クエリーc 1,c 2の情報、フィルタ情報)
In [8]: c1.account
Out[8]: <Account: Account: Rose>
In [9]: print(c1.account)
Account: Rose
In [10]: print(c2.account)
Account: Rose
In [11]: c3 = models.Contact.objects.filter(pk=1)
In [12]: c3
Out[12]: <QuerySet [<Contact: Rose, 123456>]>
Contactデータテーブルレコードの変更(c 2のphoneを変更)
In [13]: c2.mobile = '78910'
In [14]: c2.save()
In [15]: c2
Out[15]: <Contact: Rose, 78910>
In [16]:
Accountテーブルの関連レコードの削除(カスケード削除の有無を確認)
In [16]: a1.delete()
Out[16]: (3, {'app01.Contact': 2, 'app01.Account': 1})
In [17]: a1.save()
In [18]: models.Contact.objects.all()
Out[18]: <QuerySet []>
In [19]: