134ジャンゴモデル1の操作

昨日のレビュー

1 自定义过滤器和标签
	·第一步:注册app
	·第二步:在app下创建templatetags包(不能改名)
	·第三步:在包下新建xx.py文件(名字自起)
	·第四步:写代码
		from django import template
		register = template.Library()
		@register.filter 过滤器
		@register.simple_tag
	·第五步:在模版中使用
		{
    
    % load xx %}
		{
    
    {
    
     a|过滤器名字:'b' }}
		{
    
    % 标签名 a b c %}

2 静态文件引入的三种方式
	-第一种:/static/a/b/c
	-第二种:
		{
    
    % load static %}
		src = "{% static '参数' %}"
	-第三种:
		{
    
    % load static %}
		src = '{% get_static_prefix %}a/b/c'
		
3 模版的导入
	-写一个xx.html
	-在其他的yy.html直接饮用他
		{
    
    % include 'xx.html' %}
	
4 模版的继承
	-写一个母版 base.html
	{
    
    % block 名字 %}
	{
    
    % endblock %}
	
	-在其他模版中继承母版
	{
    
    % load 'base.html' %}
	{
    
    % block 名字 %}
	填充的内容
	{
    
    % endblock %}
	
5 inclusion_tag
	·第二步:在app下创建templatetags包(不能改名)
	·第三步:在包下新建xx.py文件(名字自起)
	·第四步:写代码
		from django import template
		register = template.Library()
		@register.inclusion_tag('模版文件') 
		def xx():
			return{
    
    key:value}
	·第五步:在模版中使用
		{
    
    % load xx %}
		{
    
    % 名字 参数 %}
		
6 单表常见字段,常见字段属性
	-常见字段
		-AutoField:自增
		-CharField:varchar类型
		-DecimalField:带小数点数字
		-DateTimeField:年月日时分秒
		-DateField:年月日
	-常见字段属性
		-主键
		-max_length  最大长度
		-max_digits
		-decimal_places=2
		
		公用的:
		-null
		-default
		-db_index
7 单表新增的两种方式

8 单表的查询
	-filter(key=value, key=value)  # 返回queryset对象(列表)
	
	-filter(key=value, key=value)[0]
	-filter(key=value, key=value).first()
	-get(key=value,key=value)  # 返回一个对象,查询必须有且只有一个,不符合这个条件都抛异常

今日のコンテンツ

1一般的に使用される珍しいフィールドとパラメータの概要

# 常用字段
		-IntegerField   整数
    -AutoField
    -BooleanField
    -CharField
    -DateField
    -DateTimeField
    -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:
        # 更改存在书库的表名,默认的是app01_book,这里改成book
        db_table = "book"
        # 指定联合索引
        index_together = [
            ("name", "publish"),
        ]
        # 指定联合唯一索引
        unique_together = (("name", "publish"),)
        
   -了解
	    	# admin后台操作中显示的表名称
    		# 使用verbose_name,后台显示时会加s
        verbose_name='图书表'
        # verbose_name_plural则直接显示
        verbose_name_plural='图书表'
        
        # 注: 有与后台数据库交互的操作时使用迁移命令,没有则不需要,例如更改admin内显示的名字时就不需要

2ネイティブ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',
        },
    }
}

3単一テーブルクエリAPI

	# 单表api操作
	# 1 all 查询所有,返回queryset对象,目前先当成列表(像列表)
	# 实际上一次只取出21条,all()实际上返回的是一个生成器
	res = models.Author.objects.all()
	print(res)
	print(type(res))
	
	# 2 filter 过滤
	res = models.Book.objects.filter(author='莫言')
	res = models.Book.objects.all().filter(author='莫言')
	res = models.Book.objects.all().filter(author='莫言', publisher='人民文学出版社')

	# 3 get
	res = models.Book.objects.get(author='莫言')
	res = models.Book.objects.all().get(author='莫言')
	res = models.Book.objects.filter().get(author='莫言')

	# 4 exclude排除
	# 查询名字不是XX的数据
	res = models.Book.objects.exclude(title='天堂蒜薹之歌').filter()

	# 5 order_by 排序
	res = models.Book.objects.order_by('id')
	res = models.Book.objects.order_by('-id')  # 倒序
	res = models.Book.objects.order_by('name', '-id')  # 先按name升序,再按id降序

	# 6 reverse 必须结合order_by使用,对结果进行反转
	res = models.Book.objects.order_by('id').reverse()

	# 7 count 统计条数
	# 不用len,也是orm的一种优化
	res = models.Book.objects.exclude(title='天堂蒜薹之歌').count()

	# 8 first
	# 并不是查出来然后取第一条,而是直接查第一条
	res = models.Book.objects.filter(author='莫言').first()

	# 9 last
	# 并不是查出来然后取最后一条,而是反向查第一条
	res = models.Book.objects.filter(author='莫言').first()

	# 10 exists  返回不再是queryset对象了,如果QuerySet包含数据,就返回True,否则返回False
	res = models.Book.objects.filter(author='莫言').exists()

	# 11 values(*field) (select title from book)
	# 指定只查某几个字段,返回的是字典
	# 返回一个ValueQuerySet——一个特殊的QuerySet运行后得到的并不是一序列
	# model的实例化对象,而是一个可迭代的字典序列
	res = models.Book.objects.all().values('title')

	# 12 values_list 和values非常相似,返回的是一个元组
	res = models.Book.objects.all().values_list('title')

	# 13 distinct() 返回一个无重复结果
	res = models.Book.objects.all().distinct()

4二重下線に基づくファジークエリ

#1  价格在[100,200,300]这个范围内
Book.objects.filter(price__in=[100,200,300])
# 2 大于,小于,大于等于,小于等于
Book.objects.filter(price__gt=100)
Book.objects.filter(price__lt=100)
Book.objects.filter(price__gte=100)
Book.objects.filter(price__lte=100)
# 3 范围
Book.objects.filter(price__range=[100,200])
# 包含
Book.objects.filter(title__contains="python")
# 4 忽略大小写包含
Book.objects.filter(title__icontains="python")
# 5 以xx开头
Book.objects.filter(title__startswith="py")
# 6 时间类型,年份是2012年的
Book.objects.filter(pub_date__year=2012)

5テーブルレコードを削除します

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

6テーブルレコードを変更する

  #修改记录
  # 第一种: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()

7スクリプトでdjangoサービスを呼び出す

# s1.py
import os
if __name__ == '__main__':
    # 1 引入django配置文件
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "MyLibrary1.settings")
    # 2 让django启动起来
    import django
    django.setup()
    # 3 使用表模型
    from app01 import models
    models.Book.objects.create()

補足

1タイムゾーンと国際化の問題

settings.py中
a 后台管理汉语问题
	LANGUAGE_CODE = 'zh-hans'
b 时区问题(使用东八区)
	# 更改以下两个参数:
	TIME_ZONE = 'Asia/Shanghai'
	USE_TZ = False

2 django admin(管理バックグラウンドの簡単な使用)

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

3空白のパラメータの役割

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

·	字段属性,blank=True # 在admin中新增数据可以为空
即使字段属性null=True,admin中添加数据还是不能为空,所以把blank设为True
	
	# 修改和数据库有关才需要做迁移

操作

1チェーンコール(クエリセットはチェーンコールの使用)チェーンコールをサポートするクラスを実装します

2検証:querysetオブジェクト、forループにある場合、実際には21個のアイテムが出力されず、クエリsqlが実行されます

3次の操作を実行します

1 查询老男孩出版社出版过的价格大于200的书籍
2 查询20178月出版的所有以py开头的书籍名称
3 查询价格为50,100或者150的所有书籍名称及其出版社名称
4 查询价格在100200之间的所有书籍名称及其价格
5 查询所有人民出版社出版的书籍的价格(从高到低排序,去重)

4頻繁に使用されるフィールドと異常に使用されるフィールド、頻繁に使用されるパラメータと異常に使用されるパラメータを整理し、ネイティブsqlを出力し、apiをクエリし、ファジークエリを実行し、テーブルレコードを削除し、テーブルレコードを変更し、Pythonスクリプトがdjango環境を呼び出します。

5 14のメソッドのうちクエリAPIを整理します。これらのメソッドは、クエリセットオブジェクトであり、クエリセットオブジェクトではない値を返します。また、それらは何ですか。

おすすめ

転載: blog.csdn.net/qq_40808228/article/details/109055900