django orm Meta 元信息,执行SQL,执行脚本的三种方式

一.Meta 元信息

1.Meta 类

  • ORM对应的每一个模型类中都可以包含一个Meta类, 而Meta类中封装了一些数据库的信息

2.主要字段

  • db_table : ORM在数据库中的表名默认是 [app_类名],可以通过 db_table 可以重写表名
  • index_together : 多个字段联合索引
  • unique_together : 联合唯一索引
  • ordering : 指定默认按什么字段排序, 只有设置了该属性, 我们查询到的结果才可以被reverse( )

3.示例

class User(models.Model):
    nid = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32,verbose_name='用户名')
    pwd = models.CharField(max_length=64,verbose_name='密码')

    class Meta:
        db_table='S_User'  #表名
        index_together=('name','pwd')  # 多个字段联合索引
        unique_together=('name','pwd') # 联合唯一
        ordering=('nid', ) # 默认以哪个字段排序

二.Django执行原生 SQL

在查询表内容时, 如果遇到使用ORM无法满足需求的情况下, 我们就需要使用原生sql语句进行查询, 而ORM给我们提供了这个功能 .raw( )

  • 执行原生SQL, 与使用的模型类就无关了, SQL里面写的查什么得到的就是什么, 看下面使用两个不同模型类测试
# 使用原生SQL进行查询
from app01 import models

res = models.Book.objects.raw('select * from app01_author where age>23')
for any_obj in res:
print(f'使用的对象:{any_obj} 查询的结果:(名字:{any_obj.name} 年龄:{any_obj.age})')
'''
使用的对象:水浒传 查询的结果:(名字:chris 年龄:43)
使用的对象:三国演义 查询的结果:(名字:小rub 年龄:45)
'''

res = models.Author.objects.raw('select * from app01_author where age>23')
for any_obj in res:
print(f'使用的对象:{any_obj} 查询的结果:(名字:{any_obj.name} 年龄:{any_obj.age})')
'''
使用的对象:chris 查询的结果:(名字:chris 年龄:43)
使用的对象:小rub 查询的结果:(名字:小rub 年龄:45)
'''

ps : 使用原生 sql 语句 select 后面必须存在主键或者直接写*, 否则报错

res = models.Author.objects.raw('select name,age from app01_author where age>23')

image-20210324170833740.png

三.Django执行脚本的三种方式

1.Django Shell使用

django shell 是一个对Django进行直接操作,但Django文件不会有遗留数据,可以对Django直接操作,如:orm操作,对数据库增删查改

使用介绍:

在Django文件下(正常启动Django命令文件下),执行shell命令
启动命令:python manage.py shell
退出命令:exit()

操作案例:

# 可以在Python console里执行Python命令或者包含django的命令
> from app1.models import User
> user = User.objects.get(name="zhangsan")
> user.name = "zhangsan01"
> user.save()

2.Django runscript 的使用

2.1 安装扩展插件

pip install django-extensions

2.2 在INSTALLED_APP中添加'django_extensions'

INSTALLED_APPS = ( 
    ... 
    'django_extensions', 
    ...
) 

2.3 runscript命令使用方法

  • 方法1:在项目跟目录下创建scripts目录,创建init.py文件和运行脚本
    假设运行脚本为test.py,包含如下内容:
#test.py
def run():
    for i in range(10):
        print(str(i), end='--')
  • 方法2:也可以在项目的各个app中创建scripts文件夹,添加init_.py文件盒运行脚本。runscript会搜索上诉两个地方的脚本。

2.4 运行方法

  • 对在根目录下的scripts方案:python manage.py runscript [文件名]

3.直接导入Django环境

# 测试环境的准备 去manage.py中拷贝前四行代码 然后自己写两行
import os
if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Student_System.settings")
    import django
    django.setup()
    # 在这个代码块的下面就可以测试django里面的单个py文件了(注意: 导模块也要写在这下面)

版权声明:
作者:淘小欣
链接:https://blog.taoxiaoxin.club/155.html
来源:淘小欣的博客
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
海报
django orm Meta 元信息,执行SQL,执行脚本的三种方式
一.Meta 元信息 1.Meta 类 ORM对应的每一个模型类中都可以包含一个Meta类, 而Meta类中封装了一些数据库的信息 2.主要字段 db_table : ORM在数据库中的表名……
<<上一篇
下一篇>>