1. 程式人生 > >python學習第七十四天:單表查詢

python學習第七十四天:單表查詢

浮點型 contain creat 第一條 nvi int 長度 positive 位長

單表查詢

創建表

創建模型
在models.py中定義類,一個類就是一張表
from django.db import models


class Book(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=64)
    pub_data = models.DateField()
    price = models.DecimalField(max_digits=5, decimal_places=2)
    publish = models.CharField(max_length=12)
    def __str__(self):
        return self.name
字段與參數
AutoField                   自增長
BigAutoField    
SmallIntegerField           小整數 -32768 32767
PositiveSmallIntegerField   正小整數 0 32767
IntegerField                -2147483648 2147483647
PositiveIntegerField        0 2147483647
BigIntegerField             -9223372036854775808 9223372036854775807
BooleanField                布爾值類型
NullBooleanField            可以為空的布爾值
CharField                   字符類型,必須提供max_length參數
DateField                   日期格式      YYYY-MM-DD
TimeField                   時間格式      HH:MM[:ss[.uuuuuu]]
FloatField                  浮點型
DecimalField                10進制小數
    參數:
    max_digits,小數總長度
    decimal_places,小數位長度
BinaryField                 二進制類型
參數
null        如果為True,Django 將用NULL 來在數據庫中存儲空值。 默認值是 False.
blank       如果為True,該字段允許不填。默認為False
default     字段的默認值。可以是一個值或者可調用對象。如果可調用 ,每有新對象被創建它都會被調用。
primary_key 如果為True,那麽這個字段就是模型的主鍵。
unique      如果該值設置為 True, 這個數據字段的值在整張表中必須是唯一的
choices     由二元組組成的一個可叠代對象(例如,列表或元組),用來給字段提供選擇項。

settings配置

DATABASES = {
    ‘default‘: {
        ‘ENGINE‘: ‘django.db.backends.mysql‘,
        ‘NAME‘: ‘lqz‘,
        ‘USER‘: ‘root‘,
        ‘PASSWORD‘: ‘123456‘,
        ‘HOST‘: ‘127.0.0.1‘,
        ‘PORT‘: 3306,
        ‘ATOMIC_REQUEST‘: True
    }
}
ATOMIC_REQUEST設置為True統一個http請求對應的所有sql都放在一個事務中執行(要麽所有都成功,要麽所有都失敗)。
是全局性的配置, 如果要對某個http請求放水(然後自定義事務),可以用non_atomic_requests修飾器 

增加刪除字段

    刪除,直接註釋掉字段,執行數據庫遷移命令即可

  新增字段,在類裏直接新增字段,直接執行數據庫遷移命令會提示輸入默認值,此時需要設置
  
註意:
  1 數據庫遷移記錄都在 app01下的migrations  2 使用showmigrations命令可以查看沒有執行migrate的文件
  3  makemigrations是生成一個文件,migrate是將更改提交到數據量

添加表記錄

方式一:

book_obj=Book.objects.create(title="python",state=True,price=100,publish="蘋果出版社",pub_date="2012-12-12")

方式二

book_obj=Book(title="python",state=True,price=100,publish="蘋果出版社",pub_date="2012-12-12")
book_obj.save()

查詢表記錄

all()               查詢所有結果
filter(**kwargs)    返回QuerySet對象,它包含了與所給篩選條件相匹配的對象
get(**kwargs)       只能查詢只有一個符合條件的對象,返回該對象
exclude(**kwargs)   它包含了與所給篩選條件不匹配的對象
order_by(*field)    對查詢結果排序(‘id‘)默認由小到大,(‘-id‘)又大到小
reverse()           對查詢結果反向排序
count()             返回數據庫中匹配查詢(QuerySet)的對象數量。
first()             返回第一條記錄
last()              返回最後一條記錄
exists()            如果QuerySet包含數據,就返回True,否則返回False
values(*field)      返回一個ValueQuerySet,其中包含的是一個個字典
values_list(*field) values()返回的QuerySet中的字典變元組
distinct()          從返回結果中剔除重復紀錄
模糊查詢
Book.objects.filter(price__in=[100,200,300])
Book.objects.filter(price__gt=100)
Book.objects.filter(price__lt=100)
Book.objects.filter(price__gte=100)
Book.objects.filter(price__lte=100)
Book.objects.filter(price__range=[100,200])
Book.objects.filter(title__contains="python")
Book.objects.filter(title__icontains="python")
Book.objects.filter(title__startswith="py")
Book.objects.filter(pub_date__year=2012)

刪除記錄

queryset對象可以調用,對象可以調用
ret=Book.objects.filter(name=水滸傳‘).delete()
ret=Book.objects.filter(name=紅樓夢‘).first().delete()
(1, {‘app01.Book‘: 1})  1 影響一條記錄   被影響的表名   1 影響這個表的記錄
print(ret)
這不可以 manager對象
ret=Book.objects.delete() #這個是manager對象,不可以
這個可以
ret=Book.objects.all().delete()

修改記錄

Book.objects.filter(title__startswith="py").update(price=120)
返回值為影響的條數

在python腳本中調用Django環境

import os
if __name__ == ‘__main__‘:
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "untitled15.settings")
    import django
    django.setup()

    from app01 import models

    books = models.Book.objects.all()
    print(books)

Django終端打印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‘,
        },
    }
}

python學習第七十四天:單表查詢