จะรีเซ็ต db ใน Django ได้อย่างไร? ฉันได้รับคำสั่ง 'รีเซ็ต' ไม่พบข้อผิดพลาด


99

ติดตาม Django นี้ตามตัวอย่างการสอนที่นี่: http://lightbird.net/dbe/todo_list.html

บทช่วยสอนกล่าวว่า:

"สิ่งนี้เปลี่ยนเค้าโครงตารางของเราและเราจะต้องขอให้ Django รีเซ็ตและสร้างตารางใหม่:

manage.py reset todo; manage.py syncdb"

แม้ว่าเมื่อฉันเรียกใช้manage.py reset todoฉันได้รับข้อผิดพลาด:

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

นี่เป็นเพราะฉันใช้ sqlite3 ไม่ใช่ postgresql ใช่ไหม

ใครช่วยบอกทีว่าคำสั่งรีเซ็ตฐานข้อมูลคืออะไร

คำสั่ง: python manage.py sqlclear todoส่งกลับข้อผิดพลาด:

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

ดังนั้นฉันจึงเพิ่ม 'สิ่งที่ต้องทำ' ใน INSTALLED_APPS ของฉันใน settings.py และทำงานpython manage.py sqlclear todoอีกครั้งทำให้เกิดข้อผิดพลาดนี้:

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

คำตอบ:


155

resetถูกแทนที่flushด้วย Django 1.5 ดู:

python manage.py help flush

4
น่าเสียดายที่สิ่งนี้ใช้ไม่ได้กับแต่ละแอปเช่น Manage.py reset <appname> ส่งผลให้เกิดข้อผิดพลาด: CommandError: Command ไม่ยอมรับข้อโต้แย้งใด ๆ
Andre

5
โชคดีที่มีคนย้ายกลับเป็น 1.5 :)
robertklep

ขอบคุณน่ารู้ล่าสุด (แก้ไขล่าสุดเมื่อ 6 เดือนก่อน) เอกสาร django สาธารณะเกี่ยวกับการติดตั้งยังคง (2019-07-11) พูดถึง 'รีเซ็ต': code.djangoproject.com/wiki/Fixtures
vchrizz

34

ดูเหมือนว่าคำตอบ "ล้าง" จะใช้ได้กับบางกรณี แต่ไม่ใช่ทุกกรณี ฉันไม่เพียงต้องการล้างค่าในฐานข้อมูล แต่ต้องสร้างตารางใหม่ให้ถูกต้อง ฉันยังไม่ได้ใช้การย้ายข้อมูล (ช่วงแรก ๆ ) ดังนั้นฉันจึงต้องทิ้งตารางทั้งหมดจริงๆ

สองวิธีที่ฉันพบในการวางตารางทั้งหมดทั้งสองต้องการสิ่งอื่นที่ไม่ใช่ core django

หากคุณใช้ Heroku ให้วางตารางทั้งหมดด้วย pg: reset:

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

หากคุณสามารถติดตั้ง Django Extensions ได้ก็มีวิธีการรีเซ็ตทั้งหมด:

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

6
@jonalv คุณต้องติดตั้งส่วนขยาย djangoก่อน
edjroot

6
นอกจากนี้คุณจำเป็นต้องมีการรวมภายใต้การในINSTALLED_APPS settings.py
Max Candocia

21

เช่นเดียวกับคำตอบของ LisaD Django Extensionsมีคำสั่ง reset_db ที่ยอดเยี่ยมซึ่งทำให้ทุกอย่างลดลงทั้งหมดแทนที่จะตัดทอนตารางอย่างที่ "flush" ทำ

python ./manage.py reset_db

การล้างตารางเพียงอย่างเดียวไม่ได้แก้ไขข้อผิดพลาดถาวรที่เกิดขึ้นเมื่อฉันกำลังลบวัตถุ การทำ reset_db แก้ไขปัญหา


1
นี่คือสิ่งที่ฉันกำลังมองหา แต่ฉันไม่จำเป็นต้อง--routerโต้แย้งบางทีนั่นอาจเป็นทางเลือกในตอนนี้ห้าปีต่อมา? :)
damd


11

หากคุณต้องการล้างฐานข้อมูลทั้งหมดคุณสามารถใช้: python Manage.py flush หากคุณต้องการล้างตารางฐานข้อมูลของแอป Django คุณสามารถใช้: python Manage.py migrate appname zero


9

ด้วย django 1.11 เพียงแค่ลบไฟล์การย้ายข้อมูลทั้งหมดออกจากmigrationsโฟลเดอร์ของแต่ละแอปพลิเคชัน (ทุกไฟล์ยกเว้น__init__.py) แล้ว

  1. วางฐานข้อมูลด้วยตนเอง
  2. สร้างฐานข้อมูลด้วยตนเอง
  3. python3 manage.py makemigrationsวิ่ง
  4. python3 manage.py migrateวิ่ง

และ voilla ฐานข้อมูลของคุณถูกรีเซ็ตอย่างสมบูรณ์


หากใช้ sqlite ไม่จำเป็นต้องสร้างฐานข้อมูลด้วยตนเองpython3 manage.py makemigrationsและ python3 manage.py migrateจะดูแลสิ่งนั้นอย่างน้อยใน django 2.0
toto_tico

4

สำหรับฉันสิ่งนี้ช่วยแก้ปัญหาได้

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

เพียงติดตามคำตอบของ @ LisaD
ในปี 2016 ( Django 1.9) คุณต้องพิมพ์:

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

สิ่งนี้จะทำให้คุณมีฐานข้อมูลใหม่ภายใน Heroku


1
  1. เพียงแค่ลบฐานข้อมูลของคุณด้วยตนเอง ตรวจสอบให้แน่ใจว่าคุณสร้างการสำรองข้อมูลก่อน (ในกรณีของฉันคือdb.sqlite3คือฐานข้อมูลของฉัน)

  2. รันคำสั่งนี้ manage.py migrate


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.