Django: จะถอนการติดตั้งแอพ Django ได้อย่างไร?


109

ขั้นตอนในการถอนการติดตั้งแอพ Django โดยสมบูรณ์พร้อมกับการลบฐานข้อมูลคืออะไร?


ลบชื่อแอพนั้นออกจากแอพที่ติดตั้ง settings.py จากนั้นลบลิงก์ไปยังแอพนั้นออกจากไฟล์ urls.py หลัก จากนั้นคุณสามารถลบแอพนั้นได้อย่างปลอดภัย
Aseem

หากคุณกำลังพัฒนาโดยใช้ SQLite และคุณไม่คิดที่จะรีเซ็ตฐานข้อมูลคุณสามารถลบโฟลเดอร์แอพdb.sqlite3และลบออกจากINSTALLED_APPSในได้settings.pyหรือไม่?
Kevin

คำตอบ:


150
  1. Django <1.7 มีคำสั่งการจัดการที่สะดวกซึ่งจะให้ SQL ที่จำเป็นแก่คุณในการวางตารางทั้งหมดสำหรับแอป ดูเอกสาร sqlclearสำหรับข้อมูลเพิ่มเติม โดยทั่วไปแล้วการรัน./manage.py sqlclear my_app_nameจะทำให้คุณได้รับคำสั่ง SQL ที่ควรดำเนินการเพื่อกำจัดการติดตามทั้งหมดของแอปในฐานข้อมูลของคุณ คุณยังคงต้องคัดลอกและวาง (หรือไพพ์) คำสั่งเหล่านั้นลงในไคลเอนต์ SQL ของคุณ สำหรับ Django 1.7 ขึ้นไปให้ใช้./manage.py migrate my_app_name zero(ดูเอกสารการย้ายข้อมูล ) ซึ่งจะเรียกใช้การล้างฐานข้อมูลโดยอัตโนมัติ

  2. ในการลบแอปออกจากโปรเจ็กต์ของคุณสิ่งที่คุณต้องทำคือลบแอพออกจากINSTALLED_APPSโปรเจ็กต์ของsettings.pyคุณ Django จะไม่โหลดแอปอีกต่อไป

  3. หากคุณไม่ต้องการให้ไฟล์ของแอพค้างอยู่อีกต่อไปให้ลบไดเร็กทอรีแอพออกจากไดเร็กทอรีโปรเจ็กต์ของคุณหรือตำแหน่งอื่นบน PYTHONPATH ของคุณที่มันอยู่

  4. (ไม่บังคับ) หากแอปเก็บไฟล์มีเดียไฟล์แคชหรือไฟล์ชั่วคราวอื่น ๆ ไว้ที่ใดที่หนึ่งคุณอาจต้องการลบไฟล์เหล่านั้นด้วย นอกจากนี้โปรดระวังข้อมูลเซสชันที่ค้างอยู่ซึ่งอาจหลงเหลือจากแอป

  5. (ไม่บังคับ) ฉันจะลบประเภทเนื้อหาเก่า ๆ ด้วย

เช่นนั้น.

from django.contrib.contenttypes.models import ContentType
for c in ContentType.objects.all():
    if not c.model_class():
        print "deleting %s"%c # print(f"deleting {c}") # for Python 3.6+
        c.delete()

5
คำตอบที่ยอดเยี่ยมมีเพียงสิ่งเดียวที่ฉันทำ: pip uninstall package-name คือเพื่อนของคุณดีกว่าการลากไปรอบ ๆ PYTHONPATH ของคุณ
DaveJ

25
บน Django 1.7 ถ้าคุณใช้การโยกย้ายขั้นตอนที่ 1 ./manage.py migrate my_app_name zeroจะเป็น และมันจะเรียกใช้งาน SQL โดยอัตโนมัติเช่นกัน
Nathan Do

12
sqlclearถูกลบออกใน Django 1.9 ดังนั้นคำตอบนี้ใช้ได้ดีกับเวอร์ชันก่อนหน้าเท่านั้น ดู: docs.djangoproject.com/th/1.10/releases/1.9/…
Akhorus

7
หากแอปที่กำลังลบมีการย้ายข้อมูลซึ่งการย้ายข้อมูลของแอปอื่นขึ้นอยู่กับระบบการย้ายข้อมูลจะพังลงเมื่อเห็นว่าไม่มีการย้ายข้อมูลที่อ้างอิงเหล่านั้นอีกต่อไป โปรดใช้ความระมัดระวังในการใช้คำตอบด้านบนหากแอปที่จะลบนั้นขึ้นอยู่กับประวัติการย้ายข้อมูลของแอปอื่นของคุณ
Filip Kilibarda

1
และเพื่อความสมบูรณ์โดยทั่วไปคุณจะต้องลบการอ้างอิง include("appname.urls")จากโครงการurls.py
nigel222

16
  1. แสดงความคิดเห็นsettings.pyในINSTALLED_APPSไลน์ของแอพที่ไม่จำเป็น
  2. ลบโฟลเดอร์ทั้งหมด__pycache__และmigrateที่โครงการของคุณ
  3. ลบโมเดลที่ไม่จำเป็นใน models.py
  4. ลบทั้งหมดนำเข้าการเชื่อมโยงในviews.py, admin.pyท้าย ฯลฯ
  5. ลบลิงค์ทั้งหมดในurls.pyแอพที่ไม่จำเป็นของคุณ
  6. ในฐานข้อมูลลบตารางที่ไม่จำเป็นซึ่งเกี่ยวข้องกับแอพ (ฉันทำด้วยโปรแกรมช่วยเหลือ "Valentina Studio")
  7. ลบโฟลเดอร์ของแอพ
  8. ในบรรทัดคำสั่งให้ทำ: python manage.py migrateและpython manage.py syncdb

3

แอป django คือ "ชุด" ของไฟล์ * .py และไดเรกทอรีที่มี django-app-name ดังนั้นคุณสามารถลบทั้งโฟลเดอร์ด้วยไฟล์ * .py ทั้งหมด

ในการ "ลบ" ตารางออกจากฐานข้อมูลคุณควรใช้ DELETE FROM <app-name_table-names>

นอกจากนี้คุณต้องลบบรรทัดที่มีชื่อแอพจาก setting.py ในไดเรกทอรีราก


สมมติว่าคุณไม่ได้แชร์ฐานข้อมูลกับแอพอื่นคุณก็สามารถวาง db ที่มีชื่อใน settings.py ได้
joel3000

แต่ละแอปมีฐานข้อมูลของตัวเอง - ไม่เลว
V-Light

3
@ V-Light แต่ละแอปจะมีตารางของตัวเองและแต่ละโครงการจะมีฐานข้อมูลของตัวเอง
Alireza Savand

3

ในบริบทของฉันโครงการมีอยู่หลายครั้ง: ฉันมีระบบการพัฒนาเพื่อนร่วมทีมบางคนมีระบบการพัฒนามีระบบการจัดเตรียมสำหรับลูกค้าและระบบการผลิต ซึ่งหมายความว่าฉันไม่ต้องการรันคำสั่ง sql ด้วยมือ ฉันต้องการให้มันเป็นแบบอัตโนมัติ

เป้าหมาย: ลบแอปและตารางฐานข้อมูลทั้งหมด

ขั้นตอนที่ 1: ล้างแอป แต่ติดตั้งทิ้งไว้

ลบไฟล์ทั้งหมดออกจากแอปยกเว้นโฟลเดอร์ "migrations"

ดำเนินการคำสั่งนี้: manage.py makemigrations -n drop_all_tables my_app_to_remove

ไดเร็กทอรีมีลักษณะดังนี้:

my_app_to_remove/
my_app_to_remove/__init__.py
my_app_to_remove/migrations
my_app_to_remove/migrations/0001_initial.py
my_app_to_remove/migrations/....
my_app_to_remove/migrations/0030_drop_all_tables.py
my_app_to_remove/migrations/__init__.py

ทิ้งmy_app_to_removeไว้ในไฟล์ "settings.py"

ขั้นตอนที่ 2: ปรับใช้การเปลี่ยนแปลง

อัปเดตโครงการทั้งหมด บอกเพื่อนร่วมทีมให้อัปเดตโปรเจ็กต์และเรียกใช้การย้ายข้อมูล

ขั้นตอนที่ 3: ลบ "my_app_to_remove" จาก settings.py

ตอนนี้ลบ "my_app_to_remove" ออกจาก settings.py แล้วปรับใช้อีกครั้ง


2

ฉันชอบขั้นตอนจากบทความนี้มาก - รวมถึงการสนับสนุนการย้ายข้อมูล

บางทีอาจจำเป็นต้องปรับตัวในการอัปเดตโค้ดสองรายการ - แต่ดูปลอดภัยจริงๆเมื่อคุณต้องทำงานกับการปรับใช้จำนวนมาก (เช่นขั้นตอนการทดสอบเวอร์ชันเบต้าและการผลิต - ในกรณีของฉัน)

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