python學習第七十四天:單表查詢
阿新 • • 發佈:2018-09-10
浮點型 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學習第七十四天:單表查詢