# 表.objects.create
# 方法一
a = User.objects.create(userNum=123, name='ABB', age=18, sex='男')
# 方法二
d = dict(userNum=123, name='ABB', age=18, sex='男')
a = User.objects.create(**d)
#方法三
a = User(userNum=123, name='ABB', age=18, sex='男')
a.save()
# 表.objects.filter().delete()
# 方法一 刪除全部內容
User.objects.all().delete()
#方法二 刪除一條name為ABC的數據
User.objects.filter(name='ABC').delete()
#方法三 刪除多條數據
User.objects.filter(age=18).delete()
刪除過程中數據設有外鍵字段,就會同時刪除外鍵關聯的數據,刪除模式參考models.py中設置的PROTECT、SET_NULL等
# 表.objects.filter().update()
# 方法一 修改name為ABC的性別為gay
User.objects.filter(name='ABC').update(sex='gay')
# 方法二
a = dict(age='1')
User.objects.filter(name='ABC').update(**a)
# 方法三 使用F方法實現自增/自減
from djanto.db.models import F
User.objects.filter(name='ABC').update(age=F('age')+1)
# select * from user 全表查詢
a = User.objects.all()
# 查第一條
a[0].name
# select * from user LIMIT3 查前3條
a = User.objects.all()[:3]
# filter 也可添加多個條件
User.objects.filter(name='ABC',age=18)
# SQL中or方法 select * from user where name='ABC' or age=18 ,需要引入 Q
from django.db.models import Q
User.objects.filter(Q(name='ABC') | Q(age=18))
# SQL中not方法 select * from user where not name='ABC' ,在Q前加~
User.objects.filter(~Q(name='ABC'))
# 統計數量
User.objects.filter(name='ABC').count()
# 去重 select DISTINCT name from user where name='ABC' ,distinct無需設置參數,去重方式根據values
a = User.objects.values('name').filter(name='ABC').distinct()
# 降序排序查詢,降序在order_by裡設置 '-'
User.objects.order_by('-age')
(1)、on_delete = None:
刪除關聯表的數據時,當前表與關聯表的filed的行為。
(2)、on_delete = models.CASCADE:
表示級聯刪除,當關聯表(子表)中的數據刪除時,與其相對應的外鍵(父表)中的數據也刪除。
(3)、on_delete = models.DO_NOTHING:
你刪你的,父親(外鍵)不想管你
(4)、on_delete = models.PROTECT:
保護模式,如采用這個方法,在刪除關聯數據時會拋出ProtectError錯誤
(5)、on_delete = models.SET_DEFAULT:
設置默認值,刪除子表字段時,外鍵字段設置為默認值,所以定義外鍵的時候注意加上一個默認值。
(6)、on_delete = models.SET(值):
刪除關聯數據時,自定義一個值,該值只能是對應指定的實體
字符串
password=models.CharField(verbose_name='密碼:',max_length=50)
設置主鍵
account=models.CharField(verbose_name='賬號:',max_length=50,primary_key=True,db_index=True)
db_index:添加索引
設置關聯外鍵
account=models.ForeignKey(User_Account,on_delete = models.CASCADE)
整型
group_id=models.IntegerField(verbose_name='群聊編號')
布爾類型
models.BooleanField(verbose_name='是否可以增加文件',default=False)
單選
#sex choices 設置單選,元組前面的值為真是存儲值,後面的值為展示值sex=models.CharField(max_length=1,choices=[('男','男'),('女','女')])
時間
DateTimeField(DateField)x
日期+時間格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]
models.DateField(verbose_name='token更新時間',auto_now=True)
日期格式 YYYY-MM-DD
auto_now:每次修改都會自動更新
auto_now_add:數據創建時值為添加時的時間,後續其他字段數據修改不會變
TimeField(DateTimeCheckMixin, Field)
時間格式 HH:MM[:ss[.uuuuuu]]
想要刪除自己之前練習的數據庫模型
Order.objects.all().values().delete()
刪除文件
__init__.py
文件python manage.py makemigrations
python manage.py migrate
django
解決manage.py migrate
無效的問題解決方案
python manage.py dbshell 進到數據庫中,執行delete from django_migrations where app='your_appname';
python manage.py makemigrations(若migrations文件未刪除,可不執行這一步)
python manage.py migrate 好啦,大功告成
原因
造成多次應用migrations失敗的原因是,當前model是修改過的,原來的migrations已經被我刪除,但是,重新生成的migrations使用遞增整數記名,所以,在django_migrations表中0001,0002等前面幾個數字的文件都已被記錄,在Django看來,被記錄了就相當於已應用,所以,會出現剛開始的No migrations to apply.