2013-03-16 67 views
59

Sau Django này bằng cách Ví dụ tutotrial đây: http://lightbird.net/dbe/todo_list.htmlLàm thế nào để thiết lập lại db trong Django? Tôi nhận được một lệnh 'reset' không tìm thấy lỗi

Các hướng dẫn nói:

"This changes our table layout and we’ll have to ask Django to reset and recreate tables:

manage.py reset todo; manage.py syncdb "

tuy nhiên, khi tôi chạy manage.py reset todo, tôi nhận được lỗi:

$ python manage.py reset todo          
- Unknown command: 'reset' 

Đây có phải là vì tôi đang sử dụng sqlite3 và không phải postgresql không?

Ai đó có thể cho tôi biết lệnh để đặt lại cơ sở dữ liệu là gì?

Lệnh: python manage.py sqlclear todo trả về lỗi:

$ python manage.py sqlclear todo  
CommandError: App with label todo could not be found.  
Are you sure your INSTALLED_APPS setting is correct? 

Vì vậy, tôi đã thêm 'todo' để INSTALLED_APPS tôi trong settings.py, và chạy python manage.py sqlclear todo một lần nữa, gây ra lỗi này:

$ python manage.py sqlclear todo          
- NameError: name 'admin' is not defined 
+0

trùng lặp có thể xảy ra của [gì là cách dễ nhất để xóa một cơ sở dữ liệu từ CLI với manage.py trong Django?] (Http : //stackoverflow.com/questions/6485106/what-is-the-easiest-way-to-clear-a-database-from-the-cli-with-manage-py-in-djang) –

Trả lời

104

reset đã được thay thế bằng flush với Django 1.5, xem:

python manage.py help flush 
+4

Thật không may điều này không làm việc trên các ứng dụng riêng lẻ như manage.py reset . Nó dẫn đến lỗi: CommandError: Lệnh không chấp nhận bất kỳ đối số nào – Andre

+4

May mắn thay, [ai đó đã chuyển nó trở lại] (https://github.com/gregmuellegger/django-reset) đến 1.5 :) – robertklep

24

Dường như câu trả lời 'tuôn ra' sẽ hoạt động đối với một số người, nhưng không phải tất cả các trường hợp. Tôi cần thiết không chỉ để tuôn ra các giá trị trong cơ sở dữ liệu, mà còn để tạo lại các bảng đúng cách. Tôi không sử dụng di chuyển được (ngày đầu) vì vậy tôi thực sự cần thiết để thả tất cả các bảng.

On Heroku ai có thể thả tất cả các bảng với pg: reset:

heroku pg:reset DATABASE_URL 
heroku run python manage.py syncdb 

Và mặc dù manage.py 'Reset' đã được thay thế bằng 'tuôn', Django Extensions có một cách để vẫn làm một thiết lập lại hoàn toàn :

python ./manage.py reset_db --router=default 
+5

Tôi nhận được: 'Không xác định lệnh: 'reset_db'' – jonalv

+2

@jonalv, bạn phải cài đặt [django-extensions] (https://github.com/django-extensions/django-extensions) trước tiên. – edjroot

+1

Ngoài ra, bạn cần có nó trong 'INSTALLED_APPS' trong' settings.py'. –

16

Tương tự như câu trả lời của LisaD, Django Extensions có một lệnh reset_db tuyệt vời mà hoàn toàn rơi tất cả mọi thứ, thay vì chỉ cắt bỏ các bảng như "tuôn ra" nào. Bạn cần phải xác định một router, vì vậy nó có thể trông giống như:

python ./manage.py reset_db --router=default

Chỉ đỏ bừng bảng không được sửa chữa một lỗi dai dẳng đã xảy ra khi tôi đã xóa các đối tượng. Thực hiện reset_db đã khắc phục được sự cố.

4

Đối với tôi, giải pháp này đã giải quyết được vấn đề.

heroku pg:reset DATABASE_URL 

heroku run bash 
>> Inside heroku bash 
cd app_name && rm -rf migrations && cd .. 
./manage.py makemigrations app_name 
./manage.py migrate 
1

Chỉ cần theo dõi @LisaD's câu trả lời.
Tính đến 2016 (Django 1.9), bạn cần phải gõ:

heroku pg:reset DATABASE_URL 
heroku run python manage.py makemigrations 
heroku run python manage.py migrate 

này sẽ cung cấp cho bạn một cơ sở dữ liệu mới tươi trong Heroku.

5

Nếu bạn muốn xóa toàn bộ cơ sở dữ liệu, bạn có thể sử dụng: python quản lý.py tuôn Nếu bạn muốn để làm sạch bảng cơ sở dữ liệu của một ứng dụng Django, bạn có thể sử dụng: python manage.py di chuyển appname zero

3

Với django 1.11, chỉ đơn giản là xóa tất cả các file chuyển từ thư mục migrations của mỗi ứng dụng (tất cả các tệp ngoại trừ __init__.py). Sau đó,

  1. Thả cơ sở dữ liệu theo cách thủ công.
  2. Tạo cơ sở dữ liệu theo cách thủ công.
  3. Chạy python3 manage.py makemigrations.
  4. Chạy python3 manage.py migrate.

Và voilla, cơ sở dữ liệu của bạn đã được đặt lại hoàn toàn.

+0

nếu sử dụng sqlite, không cần tạo thủ công cơ sở dữ liệu, 'python3 manage.py makemigrations' và' python3 manage.py migrate' sẽ xử lý điều đó, ít nhất là trong django 2.0 –

0

Nếu bạn đang sử dụng di chuyển, điều này link có một số giải pháp tùy thuộc vào kịch bản.

1

nếu bạn đang sử dụng Django 2,0 Sau đó

python manage.py flush 

sẽ làm việc

Các vấn đề liên quan