django2.0演示mysql下的一对一增删查改操作

本博文源于django基础操作,旨在演示django下orm对mysql一对一关系模型的基础操作。完成本实验前,可参考此博文的基础配置可参考此博文,简单易操作。
django从零基础配置settings.py
里面包含:

  • django运行成功
  • 资源路径配置,链接App,注释csrf的操作

其中资源路径可不配置,外加链接mysql数据库。

DATABASES = {
    'default': {
        'ENGINE':'django.db.backends.mysql', # 统一规定
        'NAME':'test', # 需要自己创建数据库,然后将名字写在上面
        'HOST':'127.0.0.1', # 一般为固定套路
        'PORT':3306, # 固定套路
        'USER':'root', # 自身的user
        'PASSWORD':'123456', # 自身的password
    }
}

下面开始本实验。

实验步骤

  • 在models里码两张表的创建
  • 命令行生成数据库,及迁移文件
  • 命令行下操作mysql数据表,进行增删查改!

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.OneToOneField(
        Account,
        on_delete=models.CASCADE,
        primary_key=True,
    )
    mobile = models.CharField(max_length=20)

    def __str__(self):
        return "%s, %s"%(self.account.user_name,self.mobile)


  • 两个字段模型的关系通过Contact模型中的account字段进行定义
  • OneToOneFiels()的第1个参数定义被关联的模型名
  • on_delete参数定义当被关联模型(Account)的记录被删除时本模型的记录如何处理,models.CASCADE用于定义此时本记录(Contact)也被删除
  • 每个模型的__str__()函数用于定义模型的显示字符串

生成数据库,并产生迁移文件

C:\Users\Administrator\Desktop\核心文件\python_file\python尝试\平常练习django\tes
t02(演示模型层)>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\tes
t02(演示模型层)>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测试

  • 分别为Account和Contact创建字段信息
TypeError: Account() got an unexpected keyword argument 'mobile'

In [15]: a2 = models.Account.objects.create(user_name='Rose',password='123456789')

In [16]: a1
Out[16]: <Account: Account: zhangsan1>

In [17]: a2
Out[17]: <Account: Account: Rose>

In [21]: c1 = models.Contact.objects.create(account=a1,mobile='123456')

In [22]: c2 = models.Contact.objects.create(account=a2,mobile='123456')



  • 进行查询操作(将pk=9查询获得)
In [24]: ret = models.Account.objects.get(pk=9)

In [25]: ret
Out[25]: <Account: Account: zhangsan1>
  • 进行修改操作(将pk=9的user_name修改为list)
In [27]: ret = models.Account.objects.filter(pk=9).update(user_name='lisi')
  • 进行删除操作(将a1删除)
In [34]: a1.delete()
Out[34]: (2, {'app01.Contact': 1, 'app01.Account': 1})

In [35]: a1.save()

In [36]: 

你可能感兴趣的:(django,python,django,mysql,orm)