簡體   English   中英

Django:加載數據不起作用

[英]Django: loaddata not working

我生成了一個夾具:

python manage.py dumpdata --all > ./mydump.json

我使用以下方法清空了所有數據庫:

python manage.py sqlflush | psql mydatabase -U mydbuser

但是當我嘗試使用 loaddata 時:

python manage.py loaddata ./mydump.json

我收到此錯誤:

IntegrityError: Could not load tastypie.ApiKey(pk=1): duplicate key 
value violates unique constraint "tastypie_apikey_user_id_key" 
DETAIL:  Key (user_id)=(2) already exists.

我在生產中遇到了這個問題,我沒有想法。 有人遇到過類似的問題嗎?

第一:我相信你的 unix 管道寫錯了。

# 1: Dump your json
$ python manage.py dumpdata --all > ./mydump.json

# 2: dump your schema
$ python manage.py sqlflush > schema.sql

# 3: launch psql
# this is how I launch psql ( seems to be more portable between rhel/ubuntu )
# you might use a bit different technique, and that is ok.

編輯:(非常重要)確保您的服務器上沒有運行任何活動的 django 連接。 然后:

$ sudo -u myuser psql mydatabase

# 4: read in schema
mydatabase=# \i schema.sql
mydatabase=# ctrl-d

# 5: load back in your fixture. 
$ python manage.py loaddata ./mydump.json

第二:如果你的管子沒問題......它可能是。 根據您的架構/數據,您可能需要使用自然鍵。

# 1: Dump your json using ( -n ) natural keys.
$ python manage.py dumpdata -n --all > ./mydump.json

# followed by steps 2-5 above.

在注釋掉所有@reciever的情況下運行loaddata ,因為當loaddata加載您的數據時它們將被觸發。 如果@reciever s 創建其他對象作為副作用,它將導致沖突。

Jeff Sheffield 的解決方案是正確的,但現在我發現像django-dbbackup這樣的解決方案是迄今為止對任何數據庫執行此操作的最通用和最簡單的方法。

python manage.py dbbackup

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM