← Back to Python Course | Chapter 15: Python & MySQL | Lesson 8 of 12

Python MySQL Delete Record

किसी table से rows को DELETE FROM statement से हटाया जाता है -- हमेशा specific rows को target करने के लिए एक WHERE clause के साथ, क्योंकि बिना WHERE के unqualified DELETE FROM table की हर row हटा देता है।
Syntax
python
sql = "DELETE FROM table_name WHERE column = %s"
cursor.execute(sql, (value,))
connection.commit()

एक Specific Row Delete करना

cursor.execute("DELETE FROM customers WHERE address = %s", ("Mountain 21",)) सिर्फ उन row(s) को हटाता है जो दी गई WHERE condition से मेल खाती हैं, table की बाकी हर row को बिना छुए छोड़ देता है।

Note: असल में DELETE चलाने से पहले, हमेशा उसके WHERE clause को पहले एक SELECT के रूप में test करें, यह confirm करते हुए कि यह ठीक कौन सी rows से मेल खाएगा।
Warning: एक ऐसा WHERE clause वाला DELETE statement जो कई rows से मेल खाता है, उन सभी को एक साथ हटा देता है -- अगर सिर्फ एक row का इरादा है तो सुनिश्चित करें कि condition काफी specific है।

उदाहरण: Deleting a Specific Row

python
from unittest.mock import MagicMock

conn = MagicMock()
cursor = conn.cursor()
cursor.execute("DELETE FROM customers WHERE address = %s", ("Mountain 21",))  # only matching rows are removed
conn.commit()
print("Matching row(s) deleted")

बिना WHERE Delete करने का खतरा

बिना किसी WHERE clause वाला DELETE FROM customers syntactically valid SQL है जो table की हर एक row delete कर देता है -- DROP TABLE के विपरीत यह empty table structure को बरकरार रखता है, पर सारा data खुद खत्म हो जाता है।

Note: किसी real script में कोई भी DELETE statement चलाने से पहले, उसे खुद पढ़ें और explicitly confirm करें कि एक WHERE clause मौजूद है और सही तरीके से scoped है।
Warning: बिना WHERE के गलती से DELETE FROM table सबसे आम और costly real-world database गलतियों में से एक है -- इसे रोकने के लिए कोई built-in confirmation prompt नहीं होता।

उदाहरण: The Danger of Deleting Without WHERE

python
from unittest.mock import MagicMock

conn = MagicMock()
cursor = conn.cursor()
# DANGER: no WHERE clause -- this deletes every row in the table
sql = "DELETE FROM customers"
print("Always double-check for a WHERE clause before running:", sql)

कई Matching Rows Delete करना

एक broader condition इस्तेमाल करने वाला WHERE clause -- जैसे कोई LIKE pattern, या < जैसा comparison operator -- एक ही DELETE statement में कई rows से मेल खाकर उन्हें delete कर सकता है, ठीक वैसे ही जैसे उसी WHERE वाला SELECT कई rows return करेगा।

Note: जब भी किसी DELETE की condition कोई single unique match न हो, तो पहले उसी WHERE clause वाला equivalent SELECT चलाकर देखें कि ठीक कितनी rows प्रभावित होंगी।
Warning: DELETE के WHERE clause में एक broad LIKE pattern आपके अंदाज़े से ज़्यादा rows से मेल खा सकता है अगर वह जितना आपने सोचा उससे कम specific है।

उदाहरण: Deleting Multiple Matching Rows

python
from unittest.mock import MagicMock

conn = MagicMock()
cursor = conn.cursor()
cursor.execute("DELETE FROM customers WHERE city = %s", ("Austin",))  # broader condition can match several rows
conn.commit()
print("All matching rows removed in one statement")

Delete पर Foreign Key Constraints को Handle करना

किसी ऐसी row को delete करना जिसे अब भी किसी दूसरे table में एक FOREIGN KEY reference करता है, by default एक integrity error raise करता है -- MySQL orphaned references छोड़ने से बचने के लिए delete को मना कर देता है, जब तक कि foreign key specifically ON DELETE CASCADE के साथ defined न हो।

Note: जब तक ON DELETE CASCADE explicitly setup न हो, parent row को delete करने से पहले उस पर depend करने वाली dependent child rows को (referencing table में) पहले delete या reassign करें।
Warning: ON DELETE CASCADE dependent child rows को भी automatically delete कर देता है -- यह एक powerful पर खतरनाक option है जो गलत समझे जाने पर उम्मीद से कहीं ज़्यादा data चुपचाप हटा सकता है।

उदाहरण: Handling Foreign Key Constraints on Delete

python
from unittest.mock import MagicMock

class Error(Exception):
    pass

conn = MagicMock()
cursor = conn.cursor()
cursor.execute.side_effect = Error("Cannot delete: foreign key constraint")
try:
    cursor.execute("DELETE FROM customers WHERE id = %s", (1,))  # blocked by a referencing foreign key
except Error as e:
    print("Blocked:", e)

Safer Deletes के लिए Transactions इस्तेमाल करना

किसी delete operation को explicit try/except और failure पर conn.rollback() के साथ wrap करना सुनिश्चित करता है कि अगर multi-step delete के बीच में कुछ गलत हो, तो database एक partially-completed state की बजाय अपनी original, consistent state में रहे।

Note: एक से ज़्यादा table या step शामिल करने वाले किसी भी delete operation के लिए, पूरे operation को एक atomic unit मानते हुए failure पर explicit rollback() के साथ try/except इस्तेमाल करें।
Warning: Failure पर rollback के बिना, बीच में fail होने वाला multi-step delete database को सिर्फ कुछ intended rows हटी हुई, एक inconsistent बीच की state में छोड़ सकता है।

उदाहरण: Using Transactions for Safer Deletes

python
from unittest.mock import MagicMock

class Error(Exception):
    pass

conn = MagicMock()
cursor = conn.cursor()
try:
    cursor.execute("DELETE FROM customers WHERE id = %s", (1,))
    conn.commit()
except Error:
    conn.rollback()  # restores the database to its prior consistent state
    print("Rolled back on failure")
else:
    print("Delete committed safely")
Related Topics
{# common_mistakes/chapter_summary/browser_support: on Hindi pages the view already swaps in the hi_ translation fields (or blanks these out if untranslated), so this renders correctly for both languages without a lang_code check here. #}

Login to run this code

C/C++/Java/PHP execution requires a free account. Your code is saved — you'll land right back in the editor after logging in.