首页 > 其他分享 >django-单表操作

django-单表操作

时间:2023-11-27 22:48:34浏览次数:31  
标签:name 对象 res QuerySet django objects 单表 print 操作

一、常用字段和非常用字段

复制代码
# 常用字段
    -IntegerField   整数
    -AutoField 自增字段
    -BooleanField bool类型
    -CharField 字符串类型
    -DateField  日期字段,日期格式  YYYY-MM-DD,相当于Python中的datetime.date()实例。
    -DateTimeField  日期时间字段,格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ],相当于Python中的datetime.datetime()实例
    -DecimalField 浮点类型
    -FileField   上传文件,本质是varchar
    -ImageField   图片,本质是varchar,继承了FileField
    -TextField   存大文本
    -EmailField   本质是varchar
# 非常用字段
    -BigAutoField
    -SmallIntegerField   
    -PositiveSmallIntegerField
    -PositiveIntegerField
    -BigIntegerField
    
    
            'AutoField': 'integer AUTO_INCREMENT',
            'BigAutoField': 'bigint AUTO_INCREMENT',
            'BinaryField': 'longblob',
            'BooleanField': 'bool',
            'CharField': 'varchar(%(max_length)s)',
            'CommaSeparatedIntegerField': 'varchar(%(max_length)s)',
            'DateField': 'date',
            'DateTimeField': 'datetime',
            'DecimalField': 'numeric(%(max_digits)s, %(decimal_places)s)',
            'DurationField': 'bigint',
            'FileField': 'varchar(%(max_length)s)',
            'FilePathField': 'varchar(%(max_length)s)',
            'FloatField': 'double precision',
            'IntegerField': 'integer',
            'BigIntegerField': 'bigint',
            'IPAddressField': 'char(15)',
            'GenericIPAddressField': 'char(39)',
            'NullBooleanField': 'bool',
            'OneToOneField': 'integer',
            'PositiveIntegerField': 'integer UNSIGNED',
            'PositiveSmallIntegerField': 'smallint UNSIGNED',
            'SlugField': 'varchar(%(max_length)s)',
            'SmallIntegerField': 'smallint',
            'TextField': 'longtext',
            'TimeField': 'time',
            'UUIDField': 'char(32)',
                
# 常用参数
    -null
    -max_length
    -default
    -primary_key
    -unique
    -db_index
    
    # 
    -choices:比较常用(后面再说)
    -blank: django admin里提交数据,限制
        
# 元数据
    -必须记住的
    class Meta:
            # 表名
        db_table = "book"
        #联合索引
        index_together = [
            ("name", "publish"),
        ]
        # 联合唯一索引
        unique_together = (("name", "publish"),)
        
   -了解
        # admin中显示的表名称
        verbose_name='图书表'
        #verbose_name加s
        verbose_name_plural='图书表'
复制代码

二、打印原生sql

复制代码
1 配置文件粘贴
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console':{
            'level':'DEBUG',
            'class':'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.db.backends': {
            'handlers': ['console'],
            'propagate': True,
            'level':'DEBUG',
        },
    }
}
复制代码

三、查询表记录API

复制代码
# 1. get(**kwargs)
# 1.1: 有参,参数为筛选条件
# 1.2: 返回值为一个符合筛选条件的记录对象(有且只有一个),如果符合筛选条件的对象超过一个或者没有都会抛出错误。
obj=Employee.objects.get(id=1)
print(obj.name,obj.birth,obj.salary) #输出:Egon 1997-01-27 100.1

# 2、first()
# 2.1:无参
# 2.2:返回查询出的第一个记录对象
obj=Employee.objects.first() # 在表所有记录中取第一个
print(obj.id,obj.name) # 输出:1 Egon

# 3、last()
# 3.1: 无参
# 3.2: 返回查询出的最后一个记录对象
obj = Employee.objects.last() # 在表所有记录中取最后一个
print(obj.id, obj.name)  # 输出:9 Egon

# 4、count():
# 4.1:无参
# 4.2:返回包含记录对象的总数量
res = Employee.objects.count() # 统计表所有记录的个数
print(res) # 输出:9

# 注意:如果我们直接打印Employee的对象将没有任何有用的提示信息,我们可以在模型类中定义__str__来进行定制
class Employee(models.Model):
    ......
    # 在原有的基础上新增代码如下
    def __str__(self):
        return "<%s:%s>" %(self.id,self.name)
# 此时我们print(obj)显示的结果就是: <本条记录中id字段的值:本条记录中name字段的值>
复制代码

!!!强调!!!:下述方法查询的结果都有可能包含多个记录对象,为了存放查询出的多个记录对象,django的ORM自定义了一种数据类型Queryeset,所以下述方法的返回值均为QuerySet类型的对象,QuerySet对象中包含了查询出的多个记录对象

复制代码
# 1、filter(**kwargs):
# 1.1:有参,参数为过滤条件
# 1.2:返回值为QuerySet对象,QuerySet对象中包含了符合过滤条件的多个记录对象
queryset_res=Employee.objects.filter(department='技术部')
# print(queryset_res) # 输出: <QuerySet [<Employee: <2:Kevin>>, <Employee: <5:Jack>>, <Employee: <6:Robin>>]>

# 2、exclude(**kwargs)
# 2.1: 有参,参数为过滤条件
# 2.2: 返回值为QuerySet对象,QuerySet对象中包含了不符合过滤条件的多个记录对象
queryset_res=Employee.objects.exclude(department='技术部')

# 3、all()
# 3.1:无参
# 3.2:返回值为QuerySet对象,QuerySet对象中包含了查询出的所有记录对象
queryset_res = Employee.objects.all() # 查询出表中所有的记录对象

# 4、order_by(*field):
# 4.1:有参,参数为排序字段,可以指定多个字段,在字段1相同的情况下,可以按照字段2进行排序,以此类推,默认升序排列,在字段前加横杆代表降序排(如"-id")
# 4.2:返回值为QuerySet对象,QuerySet对象中包含了排序好的记录对象
queryset_res = Employee.objects.order_by("salary","-id") # 先按照salary字段升序排,如果salary相同则按照id字段降序排

# 5、values(*field)
# 5.1:有参,参数为字段名,可以指定多个字段
# 5.2:返回值为QuerySet对象,QuerySet对象中包含的并不是一个个的记录对象,而上多个字典,字典的key即我们传入的字段名
queryset_res = Employee.objects.values('id','name')
print(queryset_res) # 输出:<QuerySet [{'id': 1, 'name': 'Egon'}, {'id': 2, 'name': 'Kevin'}, ......]>
print(queryset_res[0]['name']) # 输出:Egon

# 6、values_list(*field):
# 6.1:有参,参数为字段名,可以指定多个字段
# 6.2:返回值为QuerySet对象,QuerySet对象中包含的并不是一个个的记录对象,而上多个小元组,字典的key即我们传入的字段名
queryset_res = Employee.objects.values_list('id','name')
print(queryset_res) # 输出:<QuerySet [(1, 'Egon'), (2, 'Kevin'),), ......]>
print(queryset_res[0][1]) # 输出:Egon
复制代码

四、基于双下划线的模糊查询

 

 

 1、删除记录

复制代码
 # 删除的两种方式
    # 第一种:queryset的delete方法
    # res=models.Book.objects.all().delete()
    # print(res)
    # 第二种:对象自己的delete方法
    # book = models.Book.objects.all().filter(name='金瓶没1').first()
    # print(type(book))
    # res=book.delete()
复制代码

2、修改表记录

复制代码
 #修改记录
    # 第一种:queryset的update方法
    # res=models.Book.objects.filter(publish='东京').update(name='金瓶没1')
    # print(res)
    # 第二种:对象自己的
    book = models.Book.objects.filter(name='xxx').last()
    book.name='asdfasd'
    book.save()
复制代码

五、python脚本中调用Django环境

如果不想让Django项目通过游览器发送一个请求响应运行sql查询  就配置python脚本中调用Django环境  鼠标点点完成测试

复制代码
# 在脚本中调用djagno服务
import os
if __name__ == '__main__':
    #1  引入django配置文件
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'day67.settings')
    # 2 让djagno启动
    import django
    django.setup()
    # 3 使用表模型
    from app01 import models
    models.Book.objects.create(name='测试书籍',publish='xx出版社')
复制代码

六、配置时区和国际化问题

setting.py中
1 后台管理汉语问题
    LANGUAGE_CODE = 'zh-hans'  # 管理后台看到的就是中文
2 时区问题(使用东八区)
    TIME_ZONE = 'Asia/Shanghai'
    USE_TZ = False

七、配置管理后台的使用(Django admin)

复制代码
0 管理后台是django提供的可以快速对表进行增删查改操作

1 创建一个后台管理账号
    python3 manage.py createsuperuser
    输入用户名
    输入邮箱(可以不填,敲回车)
    输入密码
    确认密码
    # 超级用户创建出来了,可以登录管理后台了
2 admin中表中一行一行的数据显示我们定制的样子
    重写模型类的__str__方法
复制代码

 blank参数作用

1 需要把book表注册到admin中
    在app下的admin.py中写
    from app01 import models
    # 把book表注册一些,管理后台就能看到了
    admin.site.register(models.Book)
2 可以快速的对book表进行增删查改操作

 

标签:name,对象,res,QuerySet,django,objects,单表,print,操作
From: https://www.cnblogs.com/97zs/p/17860721.html

相关文章

  • CentOS 7中的系统调用:加深你对操作系统的理解
    CentOS7中的系统调用:加深你对操作系统的理解在CentOS7这样的Linux发行版中,系统调用(SystemCall)是操作系统提供给应用程序的接口之一,它扮演着连接用户空间和内核空间的桥梁。系统调用是操作系统核心功能的一部分,理解它不仅对于系统管理员和开发人员是至关重要的,而且对于深入理解......
  • Linux发行版比较:选择适合你的操作系统
    Linux发行版比较:选择适合你的操作系统编程技术汇2023-07-1007:02北京Linux作为一种开源的操作系统,存在着许多不同的发行版(Distribution)。每个发行版在提供基本的Linux内核之外,还包括不同的软件包、桌面环境和配置工具。选择适合自己的Linux发行版是一个重要的决策,需......
  • 单表查询
    查询名字叫xxx的书fromapp01importmodelsdefbooks(request):#models.Book.objects.create(name='xxx',price=10.34,publish='南京出版社')###book=models.Book(name='yyy',price=11.34,publish='南京出版社')#book.save()......
  • 字段和字段参数介绍 单表增加
    classBook(models.Model):#如果不写id,会默认一个id,并且自增#primary_key=True表示该字段是主键,一个表中只能由一个主键#id=models.AutoField(primary_key=True)#varchar类型,长度,#字段是否可以为空:null=True,可以为空#默认值:default='未知书名......
  • 使用FastReport类库实现zebra斑马打印机的简单操作
    使用FastReport类库实现zebra斑马打印机的简单操作1.首先引入需要的类库  2.需要提前通过fastreport制作一个模板,并制定一些需要替换的变量这个套路的原理就是替换模板中的变量数据,达到输出不同的内容,如果没有替换,变量默认是空白的内容关于模板制作方面后续会在分享 ......
  • Django - 多条queryset合并,并排序
     fromitertoolsimportchainfromoperatorimportattrgetter#拿到多条querysetqueryset1=model.objects.filter(status=1).all()queryset2=model.objects.filter(status=2).all()#将上面两组查询结果合并,并设置排序方式:-create_timenew_queryset=sorted......
  • 操作系统原理 -- IPC
    引用:https://www.bilibili.com/video/BV1i94y1k7oA?p=54&vd_source=e05f4a55dd5d8e27f74472aa7fd97ace1.IPC(interprocesscommunication):进程间通信2.进程通信:共享存储:共享数据结构是由操作系统已经定义提供的。消息传递: 广播方式与共享存储......
  • selenium之鼠标键盘操作
    鼠标操作1.引入ActionChains类2.定位相关元素3.在ActionChains().调用相关鼠标操作方法fromselenium.webdriver.common.action_chainsimportActionChains双击操作:ActionChains(driver).double_click(对应元素).perform()右击操作:ActionChains(driver).context_click(对......
  • Sealos 云操作系统私有化部署教程
    Sealos私有云已经正式发布了,它为企业用云提供了一种革命性的新方案。Sealos的核心优势在于,它允许企业在自己的机房中一键构建一个功能与Sealos公有云完全相同的私有云。这意味着企业可以在自己的控制和安全范围内,享受到公有云所提供的灵活性和扩展性。这对于需要高度数据安全......
  • Golang GORM 数据库操作
    一.初始化连接1packagemodel23import(4"fmt"56"gorm.io/driver/mysql"7"gorm.io/gorm"8)910/***11Navicat数据库可视化工具:https://www.navicat.com/en/12GORM操作数据库的Golang库:https://gorm.io/......