單表查詢

單表查詢

建立表

建立模型
在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是將更改提交到數據量 

添加表記錄

方式一:python

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

方式二mysql

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', }, } }
相關文章
相關標籤/搜索