Django-數據庫操作-未完

Django-數據庫操作

在settings.py文件中:

import pymysql         # 一定要添加這兩行!通過pip install pymysql!
pymysql.install_as_MySQLdb()
# 修改DATABASES的值
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mysite',
        'HOST': '192.168.1.1',
        'USER': 'root',
        'PASSWORD': 'pwd',
        'PORT': '3306',
    }
}

創建數據 數據類型

from django.db import models
class UserInfo(models.Model):
    uid = models.AutoField(primary_key=True)
    # 自增長ID,必須帶參數爲primary_key=True,並且是唯一主鍵
    user = models.CharField(max_length=10)
    # 字符串類型,最大長度爲10
    age = models.IntegerField(default=1)
    # 數字類型,默認爲1
    sex = models.BooleanField()
    # BOOL類型
    email = models.EmailField()
    # 自帶檢查 Email 合法性的 CharField
    Intor = models.TextField()
    # 長文本類型
    Blog = models.URLField()
    # 自帶檢查 URL 合法性的 CharField

    # -------------------文件上傳-----------------
    upload = models.FileField(upload_to='uploads/')
    # 文件上傳到 MEDIA_ROOT/uploads
    # 這個字段不能設置primary_key和unique選項.在數據庫中存儲類型是varchar,默認最大長度爲100.
    upload_s = models.FileField(upload_to='uploads/%Y/%m/%d/')
    # 文件上傳到 MEDIA_ROOT/uploads/2019/07/04

    upload_e = models.FilePathField(path="/home/images", match="foo.*", recursive=True)
    # 這個字段的值被限制在系統上某個目錄中的所有文件名集合中。有三個參數
    #     path = '':  該參數必需。上行所說的‘某個目錄’的絕對路徑。Example: "/home/images".
    #     match = 'pattern':  可選參數。格式是正則表達式。用來揀選符合匹配正則表達式的文件
    #     recursive = True / False: 可選參數,默認爲False。設定是否遞歸該目錄下所有子目錄的所有文件

    add_date = models.DateTimeField(auto_now_add=True)
    # 設置初次創建的時間
    update_date = models.DateTimeField(auto_now=True)
    # 設置最後修改的時間

創建數據庫一共需要三步:

修改models.py中模型
運行python3 manage.py makemigrations爲改動創建遷移記錄
運行python3 manage.py migrate,將操作同步到數據庫。

數據增刪改查

數據的添加方法:一步到位的方法

data.objects.create(User='zz')

單個賦值的方法

datas = data()
datas.User = '陳二狗'
datas.save()

常規的有5種方法獲取數據,返回都是數據集

第一種是 data.objects.all()

這種方法獲取的是這張表裏面的所有數據

第二種是 data.objects.get(id=1)

這個比較坑,不常用,找不到直接異常
這種方法必須確保獲取的結果只有一個(多個對象會直接異常),沒有匹配條件的時候會報異常,獲取的條件是id=1

第三種方法是 data.objects.filter(id=2)

這種方法是篩選出id=2的數據,括號內還能有多個條件,比如(id=2,gender=’boy’)

第四種方法是 data.objects.exclude(id=2)

這種方法是獲取到id不等於2的數據

第五種方法是 data.objects.order_by(name)

這種方法獲取到的結果是按照name進行排序後的結果

獲取單個對象

第一種方法是 data.objects.first(name=’zeo’)
data.objects.last(name=’zeo’)

這種方法獲取到的結果是符合條件的第一個對象,當然還有最後一個對象,使用的是.last(name=’小桃紅’)

註釋:這些方法都可迭代使用

按照日期獲取當天數據

from django.utils import timezone
from datetime import timedelta
now = timezone.now()
start = now - timedelta(hours=23,minutes=59,seconds=59)
CurrentDaySubdomain = URL.objects.filter(change_time__gt=start)
for c in CurrentDaySubdomain:
    print(c.url)

其他按照時間獲取數據方法

1、gt:大於某個時間
now = datetime.datetime.now()

start = now – datetime.timedelta(hours=23, minutes=59, seconds=59)
a=yourobject.objects .filter(youdatetimcolumn__gt=start)#前一天

2、gte:大於等於某個時間:
a=yourobject.objects .filter(youdatetimcolumn__gte=start)

3、lt:小於
a=yourobject.objects .filter(youdatetimcolumn__lt=start)

4、lte:小於等於
a=yourobject.objects .filter(youdatetimcolumn__lte=start)

5、range:查詢時間段
start_date = datetime.date(2005, 1, 1)
end_date = datetime.date(2005, 3, 31)
Entry.objects.filter(pub_date__range=(start_date, end_date))

6、year:查詢某年
Entry.objects.filter(pub_date__year=2005)

7、month:查詢某月
Entry.objects.filter(pub_date__month=12)

8、day:某天
Entry.objects.filter(pub_date__day=3)

9、week_day:星期幾
Entry.objects.filter(pub_date__week_day=2)

10、獲取今天的日期,日期格式爲yyyy-MM-dd

from django.utils.timezone import now, timedelta
date = now().date() + timedelta(days=-1) #昨天
date = now().date() + timedelta(days=0) #今天
date = now().date() + timedelta(days=1) #明天

以上方法獲取的數據的結果是QuerySet()類型的數據,是一個結果類,想要獲取最後的實際結果,需要使用索引獲取

datas = data.objects.filter(id=2).values()[0]
這樣的結果是一個字典,索引0即是獲取values()列表的第一個結果

當然你也可以使用賦予變量的形式進行獲取

datas = data.objects.get(id=1)
u_id = datas.id
u_User = datas.User

這種方式進行獲取數據,這個前提是在只有一個數據的情況下進行

如果是all()或者其他方法獲取較多的數據集時候,也可以這樣獲取每個結果

data_0 = data.objects.all()
# 這裏的結果是一個數據集合,可以循環迭代和使用索引獲取值
data_1 = data_0[0]
u_id = data_1.id
u_User = data_1.User
# 通過這樣的方式,就可以實現進行單獨數據的獲取

像這種的集合,如果想要把裏面的數據全都打印出來,可以這麼處理

ret = ''
data_0 = data.objects.all()
for data_1 in data_0:
    ret += data_1.id + '|' + data_1.User + '<br>'
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章