新聞中心
Django是一個(gè)用于Web開(kāi)發(fā)的高級(jí)Python框架,它提供了一套完善的Web開(kāi)發(fā)工具和功能,包括ORM、路由、視圖、模板等。在Django中,開(kāi)發(fā)者可以使用Django自帶的定時(shí)任務(wù)功能,讓 Python 自動(dòng)執(zhí)行一些常規(guī)的任務(wù),比如備份數(shù)據(jù)、清洗數(shù)據(jù)、自動(dòng)入庫(kù)等。

在雜多等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計(jì)制作、網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都營(yíng)銷網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站建設(shè)公司,雜多網(wǎng)站建設(shè)費(fèi)用合理。
數(shù)據(jù)自動(dòng)入庫(kù)是使用Django定時(shí)任務(wù)功能的一種典型場(chǎng)景。本文將從以下幾個(gè)方面介紹如何使用Django定時(shí)任務(wù)來(lái)實(shí)現(xiàn)數(shù)據(jù)自動(dòng)入庫(kù):
1. 定義模型
在Django中,模型是連接應(yīng)用程序和數(shù)據(jù)庫(kù)的橋梁。在數(shù)據(jù)自動(dòng)入庫(kù)的場(chǎng)景中,我們需要先定義一個(gè)模型,用于存儲(chǔ)待入庫(kù)的數(shù)據(jù)。模型定義包括模型名、字段類型、字段名等信息,可以通過(guò)在models.py文件中直接定義來(lái)實(shí)現(xiàn)。
下面是一份示例代碼,定義了一個(gè)名為Book的模型,包括書(shū)名、作者、出版社和出版日期四個(gè)字段:
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.CharField(max_length=200)
publisher = models.CharField(max_length=200)
pub_date = models.DateField()
2. 編寫(xiě)數(shù)據(jù)入庫(kù)腳本
數(shù)據(jù)入庫(kù)腳本是用于將待入庫(kù)的數(shù)據(jù)寫(xiě)入數(shù)據(jù)庫(kù)的 Python 腳本。在數(shù)據(jù)自動(dòng)入庫(kù)的場(chǎng)景中,我們需要編寫(xiě)一個(gè)數(shù)據(jù)入庫(kù)腳本,用于從數(shù)據(jù)源中獲取數(shù)據(jù),并將數(shù)據(jù)寫(xiě)入到之前定義的模型中。
下面是一份示例代碼,實(shí)現(xiàn)了從豆瓣圖書(shū) API 中獲取圖書(shū)信息,并將信息寫(xiě)入到之前定義的Book模型中:
from books.models import Book
import requests
import json
def update_books():
response = requests.get(‘https://api.douban.com/v2/book/search?q=python’)
books = json.loads(response.text)[‘books’]
for book in books:
Book.objects.create(
title=book[‘title’],
author=book[‘a(chǎn)uthor’][0],
publisher=book[‘publisher’],
pub_date=book[‘pubdate’]
)
3. 配置Django定時(shí)任務(wù)
Django定時(shí)任務(wù)基于Celery和Celery Beat實(shí)現(xiàn),需要安裝對(duì)應(yīng)的庫(kù)后進(jìn)行配置。在完成安裝后,我們需要在Django項(xiàng)目中的settings.py文件中進(jìn)行如下的配置:
INSTALLED_APPS = [
# …
‘django_celery_beat’
]
CELERY_BROKER_URL = ‘redis://localhost:6379/0’
CELERY_RESULT_BACKEND = ‘redis://localhost:6379/0’
CELERY_BEAT_SCHEDULE = {
‘update_books’: {
‘task’: ‘books.tasks.update_books’,
‘schedule’: crontab(hour=12, minute=0),
}
}
其中,INSTALLED_APPS中需要加入django_celery_beat應(yīng)用,CELERY_BROKER_URL和CELERY_RESULT_BACKEND是Celery使用的異步任務(wù)隊(duì)列和結(jié)果存儲(chǔ)的配置,可以根據(jù)具體環(huán)境進(jìn)行修改。CELERY_BEAT_SCHEDULE是定時(shí)任務(wù)的具體配置,’update_books’為任務(wù)名稱,’task’指向數(shù)據(jù)入庫(kù)腳本中的update_books函數(shù),’schedule’指定了定時(shí)任務(wù)執(zhí)行的時(shí)間。
4. 編寫(xiě)Django Task
Django Task是Django中用于執(zhí)行Celery任務(wù)的一種方式。在數(shù)據(jù)自動(dòng)入庫(kù)的場(chǎng)景中,我們需要編寫(xiě)一個(gè)Django Task,用于執(zhí)行之前定義的數(shù)據(jù)入庫(kù)腳本。
下面是一份示例代碼,實(shí)現(xiàn)了以Django Task的方式調(diào)用之前編寫(xiě)的update_books函數(shù):
from celery import shared_task
from books.utils import update_books
@shared_task
def update_books_task():
update_books()
5. 啟動(dòng)Celery Worker和Beat
在完成以上的配置和編寫(xiě)后,我們需要啟動(dòng)Celery Worker和Beat,才可以實(shí)現(xiàn)Django自動(dòng)執(zhí)行定時(shí)任務(wù)??梢酝ㄟ^(guò)以下的命令來(lái)啟動(dòng)Celery Worker和Beat:
celery -A project_name worker -l info
celery -A project_name beat -l info
其中,-A參數(shù)指定了Django項(xiàng)目的入口文件,worker用于啟動(dòng)Celery Worker,beat用于啟動(dòng)Celery Beat。
6. 測(cè)試定時(shí)任務(wù)
在完成上述配置和編寫(xiě)后,我們可以手動(dòng)觸發(fā)一次定時(shí)任務(wù)來(lái)測(cè)試是否正常工作。可以通過(guò)以下命令來(lái)手動(dòng)觸發(fā)一次定時(shí)任務(wù):
celery -A project_name call books.tasks.update_books
其中,call用于觸發(fā)Celery任務(wù),books.tasks.update_books是之前定義的定時(shí)任務(wù)。
7. 結(jié)語(yǔ)
數(shù)據(jù)自動(dòng)入庫(kù)是一種常見(jiàn)的定時(shí)任務(wù)場(chǎng)景,在Django框架中可以通過(guò)Celery和Celery Beat實(shí)現(xiàn)。本文介紹了如何通過(guò)定義模型、編寫(xiě)數(shù)據(jù)入庫(kù)腳本、配置Django定時(shí)任務(wù)、編寫(xiě)Django Task和啟動(dòng)Celery Worker和Beat等步驟,實(shí)現(xiàn)Django自動(dòng)執(zhí)行定時(shí)任務(wù),并將數(shù)據(jù)自動(dòng)寫(xiě)入數(shù)據(jù)庫(kù)的功能。
相關(guān)問(wèn)題拓展閱讀:
- django怎么保存二進(jìn)制字節(jié)碼到sqlite3
django怎么保存二進(jìn)制字節(jié)碼到sqlite3
django本身沒(méi)有這樣的Field。django的FileField只存儲(chǔ)了文件名,實(shí)際文件存儲(chǔ)在media目錄里,這本來(lái)就是一種比較好的方式。如果你一定要在數(shù)據(jù)庫(kù)中直接存儲(chǔ)二進(jìn)制數(shù)據(jù),建議自定義一個(gè)FileField,修改掉里面的storage模型,直接將上傳的二進(jìn)制文件轉(zhuǎn)換為字符串,通過(guò)文本的形式保存在數(shù)據(jù)庫(kù)中。當(dāng)然更好的方顫宏臘式在我看來(lái),就是專門(mén)定義一個(gè)model,這個(gè)model定義一個(gè)TextField,定義一個(gè)自定義的FileField,定義一個(gè)OneToOneField,將FileField的茄滑storage自定義,修改掉storage里的_save()方法,讓文件保存時(shí)之返回文件名,而文絕仔件內(nèi)容卻通過(guò)文本的形式存儲(chǔ)在TextField,取數(shù)據(jù)的時(shí)候再進(jìn)行一次逆操作。
關(guān)于django數(shù)據(jù)定時(shí)存入數(shù)據(jù)庫(kù)的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都網(wǎng)站營(yíng)銷推廣找創(chuàng)新互聯(lián),全國(guó)分站站群網(wǎng)站搭建更好做SEO營(yíng)銷。
創(chuàng)新互聯(lián)(www.cdcxhl.com)四川成都IDC基礎(chǔ)服務(wù)商,價(jià)格厚道。提供成都服務(wù)器托管租用、綿陽(yáng)服務(wù)器租用托管、重慶服務(wù)器托管租用、貴陽(yáng)服務(wù)器機(jī)房服務(wù)器托管租用。
網(wǎng)站標(biāo)題:Django定時(shí)任務(wù):數(shù)據(jù)自動(dòng)入庫(kù) (django數(shù)據(jù)定時(shí)存入數(shù)據(jù)庫(kù))
文章路徑:http://www.dlmjj.cn/article/dpgpssd.html


咨詢
建站咨詢
