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>'