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')
三.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
0
二维码
海报
django orm Meta 元信息,执行SQL,执行脚本的三种方式
一.Meta 元信息
1.Meta 类
ORM对应的每一个模型类中都可以包含一个Meta类, 而Meta类中封装了一些数据库的信息
2.主要字段
db_table : ORM在数据库中的表名……

共有 0 条评论