三、批量匯入
比如我們要匯入乙個文字,裡面是標題和內容,中間用四個*隔開的,示例(oldblog.txt):
1
2
3
4
5
6
7
8
9
title 1****content 1
title 2****content 2
title 3****content 3
title 4****content 4
在終端匯入有時候有些不方便,我們在 最外面那個 mysite目錄下寫乙個指令碼,叫 txt2db.py,把 oldblog.txt 也放在mysite下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/bin/env python
#coding:utf-8
import
os
os.environ.setdefault(
"django_settings_module"
,
"mysite.settings"
)
''
'
django 版本大於等於1.7的時候,需要加上下面兩句
import
django
django.setup()
''
'
import
django
if
django.version >= (1, 7):
#自動判斷版本
django.setup()
def main():
from blog.models
import
blog
f =
open
(
'oldblog.txt'
)
for
line
in
f:
title,content = line.
split
(
'****'
)
blog.objects.create(title=title,content=content)
f.close()
if
__name__ ==
"__main__"
:
main()
print(
'done!'
)
好了,我們在終端執行它
1
2
python txt2db.py
# 執行完後顯示 乙個 done! 匯入完成!
執行完畢後會打出乙個 "done!", 資料已經全部匯入!
四、匯入資料重複 解決辦法
如果你匯入資料過多,匯入時出錯了,或者你手動停止了,匯入了一部分,還有一部分沒有匯入。或者你再次執行上面的命令,你會發現資料重複了,怎麼辦呢?
django.db.models 中還有乙個函式叫 get_or_create() 有就獲取過來,沒有就建立,用它可以避免重複,但是速度可以會慢些,因為要先嘗試獲取,看看有沒有
只要把上面的
1
blog.objects.create(title=title,content=content)
換成下面的就不會重複匯入資料了
1
blog.objects.get_or_create(title=title,content=content)
返回值是(blogobject, true/false) 新建時返回 true, 已經存在時返回 false。
更多資料庫api的知識請參見官網文件:queryset api
五、 用fixture匯入
最常見的fixture檔案就是用python manage.py dumpdata 匯出的檔案,示例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[
},
}]
你也可以根據自己的models,建立這樣的json檔案,然後用 python manage.py loaddata fixture.json 匯入
詳見:可以寫乙個指令碼,把要匯入的資料轉化成 json 檔案,這樣匯入也會更快些!
django 檔案上傳
檔案上傳 當django處理上傳乙個檔案的時候,檔案資料被放在request.files中。這個文件解釋檔案怎麼樣被儲存在磁碟上或者記憶體中,怎樣定製預設的行為。基本檔案上傳 考慮乙個包含filefield的簡單的表單 from django import forms class uploadfil...
django 檔案上傳
檔案上傳 當django處理上傳乙個檔案的時候,檔案資料被放在request.files中。這個文件解釋檔案怎麼樣被儲存在磁碟上或者記憶體中,怎樣定製預設的行為。基本檔案上傳 考慮乙個包含filefield的簡單的表單 from django import forms class uploadfil...
Django檔案上傳
lang en charset utf 8 titletitle head action home method post enctype multipart form data type file name file type submit value 提交 p form div body htm...