Làm thế nào để đặt lại db trong Django? Tôi nhận được một lệnh 'đặt lại' lỗi không tìm thấy


98

Theo dõi Django này bằng bài hướng dẫn Ví dụ tại đây: http://lightbird.net/dbe/todo_list.html

Hướng dẫn nói:

"Điều này thay đổi bố cục bảng của chúng tôi và chúng tôi sẽ phải yêu cầu Django đặt lại và tạo lại bảng:

manage.py reset todo; manage.py syncdb"

tuy nhiên, khi tôi chạy manage.py reset todo, tôi gặp lỗi:

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

Điều này có phải do tôi đang sử dụng sqlite3 chứ không phải postgresql?

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

Lệnh: python manage.py sqlclear todotrả 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 'việc cần làm' vào INSTALLED_APPS của mình trong settings.py và chạy python manage.py sqlclear todolại, dẫn đến lỗi này:

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

Câu trả lời:


153

resetđã được thay thế bằng flushDjango 1.5, xem:

python manage.py help flush

4
Rất tiếc, điều này không hoạt động trên các ứng dụng riêng lẻ như management.py reset <appname> đã làm. Nó dẫn đến lỗi: CommandError: Command không chấp nhận bất kỳ đối số nào
Andre


cảm ơn, điều cần biết là gần đây (sửa đổi lần cuối 6 tháng trước) tài liệu django công khai về đồ đạc vẫn còn (2019-07-11) nói về 'đặt lại': code.djangoproject.com/wiki/Fixtures
vchrizz

34

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

Tôi đã tìm thấy hai cách để loại bỏ tất cả các bảng, cả hai đều yêu cầu một cái gì đó khác ngoài django cốt lõi.

Nếu bạn đang ở trên Heroku, hãy thả tất cả các bảng bằng pg: reset:

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

Nếu bạn có thể cài đặt Tiện ích mở rộng Django, nó có một cách để thực hiện đặt lại hoàn toàn:

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

6
@jonalv, trước tiên bạn phải cài đặt django-extensions .
edjroot

6
Ngoài ra, bạn cần phải có nó INSTALLED_APPStrong settings.py.
Max Candocia

21

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 giúp loại bỏ hoàn toàn mọi thứ, thay vì chỉ cắt bớt các bảng như "flush".

python ./manage.py reset_db

Chỉ xả các bảng không khắc phục được lỗi liên tục xảy ra khi tôi xóa các đối tượng. Thực hiện reset_db đã khắc phục sự cố.


1
Đây là những gì tôi đang tìm kiếm, nhưng tôi không cần phải cung cấp một --routerlý lẽ, có lẽ đó là tùy chọn bây giờ, năm năm sau? :)
chết tiệt

17

nếu bạn đang sử dụng Django 2.0 thì

python manage.py flush 

sẽ làm việc


11

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


9

Với django 1.11, chỉ cần xóa tất cả các tệp di chuyển khỏi migrationsthư mục của từng ứng dụng (trừ tất cả các tệp __init__.py). Sau đó

  1. Bỏ 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 đi python3 manage.py makemigrations.
  4. Chạy đi python3 manage.py migrate.

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


nếu sử dụng SQLite, không cần phải tự tạo cơ sở dữ liệu, python3 manage.py makemigrationspython3 manage.py migratesẽ chăm sóc đó, ít nhất là trong django 2.0
toto_tico

4

Đối với tôi điều 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

3

Chỉ là theo dõi câu trả lời của @ LisaD .
Kể từ năm 2016 ( Django 1.9), bạn cần nhập:

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

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


1
  1. Chỉ cần xóa thủ công cơ sở dữ liệu của bạn. Đảm bảo bạn tạo bản sao lưu trước (trong trường hợp của tôi, db.sqlite3 là cơ sở dữ liệu của tôi)

  2. Chạy lệnh này manage.py migrate


1
python manage.py flush

đã xóa nội dung db cũ,

Đừng quên tạo siêu người dùng mới:

python manage.py createsuperuser
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.