zoukankan      html  css  js  c++  java
  • day55 django 模型层,orm连表操作

    设计表

    django之orm详解:

    https://www.cnblogs.com/komorebi/p/11551089.html

    在django中设计表

    1.先在navicat中建好一个库

    2.更改django配置中的DATABASES

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'day55',
            'USER':'root',
            'PASSWORD':'123',
            'HOST':'127.0.0.1',
            'POST':3306,
            'CHARSET':'utf8',
        }
    }
    settings.py

    3.在创建项目中的文件下的migrations文件夹下,找到__init__.py

    import pymysql
    pymysql.install_as_MySQLdb()

    4.去models文件中创建表

    from django.db import models
    
    # Create your models here.
    class Book(models.Model):
        title = models.CharField(max_length=255)
        price = models.DecimalField(max_digits=8,decimal_places=2)
        publish_data = models.DateField(auto_now_add=True)
    
    
        publish = models.ForeignKey(to='Publish')
        # 默认是跟publish的主键字段做的一对多外键关联
        authors = models.ManyToManyField(to='Author')
        # 虚拟字段  1.自动创建第三表  2.棒orm跨表查询
    
    class Publish(models.Model):
        name = models.CharField(max_length=32)
        addr = models.CharField(max_length=32)
    
    
    class Author(models.Model):
        name = models.CharField(max_length=64)
        age = models.IntegerField()
    
        author_detail = models.OneToOneField(to='AuthorDetail')
    
    
    class AuthorDetail(models.Model):
        phone = models.BigIntegerField()
        addr = models.CharField(max_length=64)

    5.写数据库迁移命令

     

    之后就开始填写数据,制作测试脚本

    from django.test import TestCase
    
    # Create your tests here.
    import os
    
    
    if __name__ == "__main__":
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day55.settings")
        import django
        django.setup()
        """
        写针对某一个.py文件的测试代码
        """
      
    from app01 import models
     

     # publish_id  实际字段传数字
        models.Book.objects.create(title='围城里的男人',price=166.3,publish_data='2016-03-15',publish_id=1)
        # publish 虚拟字段直接传对象  pk 主键
        publish_obj = models.Publish.objects.filter(pk=1).first()
        models.Book.objects.create(title='红玫瑰',price=5555,publish=publish_obj)

     改

    # 改 将id=5 的书的作者id改为4
    # 传数字
    models.Book.objects.filter(pk=5).update(publish=4)

    # 传对象  改为3
    publish_obj = models.Publish.objects.filter(pk=3).first()
    # print(publish_obj)
    models.Book.objects.filter(pk=5).update(publish=publish_obj)

    双下滑查询

    查看orm内部sql语句的方法有哪些
    1.如果是queryset对象 那么可以点query直接查看该queryset的内部sql语句
    2.在django项目的配置文件中 配置一下参数即可实现所有的orm在查询的时候自动打印对应的sql语句

    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        handlers': {
            'console':{
                'level':'DEBUG',
                'class':'logging.StreamHandler',
            },
        },
        'loggers': {
            'django.db.backends': {
            'handlers': ['console'],
            'propagate': True,
            'level':'DEBUG',
            },
             }
    }     

    配置好之后,再执行任何对数据库进行操作的语句时,会自动将Django执行的sql语句打印到pycharm终端上

    除了配置外,还可以通过一点.query即可查看查询语句

  • 相关阅读:
    使用awrrpt.sql 生成AWR报告
    oracle简单物化视图
    oracle 查询重复内容
    windows server 2008 服务器 oracle11g降级oracle10g遇到的种种问题
    简单js条码生成器
    tomcat服务器禁用非post、get方法的坑
    委托和事件
    消息队列(Message Queue)简介及其使用
    架构师修炼之道
    Xcode7 使用NSurl发送HTTP请求报错
  • 原文地址:https://www.cnblogs.com/komorebi/p/11550812.html
Copyright © 2011-2022 走看看