2016-08-15 107 views
0

我一直在搜索各種開源論壇,以獲得關於如何執行此操作的權威答案。我對任何數量的方法都很開放,但是對於這個問題,我在Django和Python上有點綠色,所以請隨身攜帶。通過視圖或JSON字典將數據添加到Django數據庫

最簡單的我的表如下:

class Player(models.Model): 
number = models.CharField(max_length=2) 
player = models.CharField(max_length=50) 
position = models.CharField(max_length=2) 
height = models.CharField(max_length=50) 
weight = models.CharField(max_length=50) 
birth = models.DateField() 
exp = models.CharField(max_length=50) 
college = models.CharField(max_length=50) 

def __str__(self): 
    return self.player 

我有超過500個的球員關聯這些數據的列表,而且我也已經能夠創建一個JSON字符串,其中顯示:

[ 
{"number": playernumber, 
    "player": playername, 
    "position": playerposition, 
    "height":playerheight, 
    "weight": playerweight, 
    "birth":playerbirthdate 
    "exp": playerexperience 
    "college": playercollege 
    } 
] 

我相信文檔最近已改變推廣使用數據遷移的,但我在這是否是改變數據的字段或實際輸入數據的位到這個有點不清楚。此外,JSON字符串可能會隨時間變化(添加記錄或編輯字段),所以我想在數據輸入到數據庫時有一些靈活性。

我也可以通過視圖輸入這些數據,但我不確定如何執行該視圖以將數據導入數據庫。

我希望我已經明確了我的問題。

感謝您的任何幫助。

亞倫

回答

0

我可以建議兩個選項:

  1. 通過視圖。最後,你創建一個帶表格的FormView上傳文件或只是一個文本框,並在後端處理json。
  2. 您可以創建一個manage.py命令來接收文件路徑作爲參數。

在這兩種情況下,處理您的JSON看起來像如下無論你把它的:

json_objects = json.loads(raw_json) 
objects = [] 
for json_obj in json_objects: 
    objects.append(Player(** json_obj)) 
Player.objects.bulk_create(objects) 

您可以刪除與Player.objects.all().delete()所有球員的情況下,執行bulk_create之前,你需要刷新所有玩家。或者,您可以選擇使用update_or_create方法在創建新對象的同時更新現有對象。

+0

謝謝安德烈。在你的代碼中'(raw_json)'是文件還是字符串變量? – user72558

+0

'raw_json'我的意思是代表你的json的字符串。如果你使用文件操作,你應該先打開('path/to/file','r').read()'。 –

+0

明白了。這很棒。假設我選擇了#2選項,我該如何執行manage.py命令?通過殼?還是隻是神奇地發生? – user72558