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

Python MySQL Update Table

मौजूदा rows को UPDATE SQL statement से in place modify किया जाता है -- SET से यह बताते हुए कि कौन सा column(s) बदलना है, और (महत्वपूर्ण रूप से) WHERE clause से कौन सी rows बदलनी हैं, क्योंकि बिना WHERE के UPDATE table की हर row modify कर देता है।
Syntax
python
sql = "UPDATE table_name SET column = %s WHERE condition_column = %s"
cursor.execute(sql, (new_value, condition_value))
connection.commit()

Basic UPDATE Statement

cursor.execute("UPDATE customers SET address = %s WHERE address = %s", ("Canyon 123", "Valley 345")) address column बदलता है, पर सिर्फ उन row(s) में जहाँ पुराना address अभी "Valley 345" से मेल खाता है -- बाकी हर row अछूती रहती है।

Note: नई value और WHERE condition की value, दोनों को उसी order में parameterized tuple से पास करें जिस order में वे SQL string में %s placeholders के रूप में आती हैं।
Warning: UPDATE का ऐसा WHERE clause जो कई rows से मेल खाता है उन सभी को identically update कर देता है -- अगर सिर्फ एक row बदलनी है तो सुनिश्चित करें कि condition काफी specific है।

उदाहरण: Basic UPDATE Statement

python
from unittest.mock import MagicMock

conn = MagicMock()
cursor = conn.cursor()
cursor.execute(
    "UPDATE customers SET address = %s WHERE address = %s",  # only rows matching the WHERE are changed
    ("Canyon 123", "Valley 345"),
)
conn.commit()
print("Matching row(s) updated")

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

बिना किसी WHERE clause वाला UPDATE customers SET address = "Unknown" syntactically valid SQL है जो table की हर एक row में address column को उसी value से overwrite कर देता है -- एक unqualified DELETE के साथ-साथ, database काम में यह सबसे costly संभावित गलतियों में से एक है।

Note: किसी real script में कोई भी UPDATE statement चलाने से पहले, explicitly confirm करें कि एक WHERE clause मौजूद है और ठीक उतनी ही row(s) तक scoped है जितना इरादा है।
Warning: असल UPDATE चलाने से पहले WHERE clause को पहले एक SELECT के रूप में test करना (यह confirm करते हुए कि ठीक कौन सी rows मेल खाती हैं) एक सस्ती, असरदार safety habit है।

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

python
from unittest.mock import MagicMock

conn = MagicMock()
cursor = conn.cursor()
# DANGER: no WHERE clause -- this overwrites every row's address
sql = "UPDATE customers SET address = %s"
print("Always double-check for a WHERE clause before running:", sql)

एक साथ कई Columns Update करना

SET clause में हर column = %s assignment को comma से अलग करके एक ही UPDATE statement में कई columns set किए जा सकते हैं -- सूचीबद्ध सभी columns एक ही statement में एक साथ, atomically बदल दिए जाते हैं।

Note: Efficiency के लिए और बदलाव को atomic रखने के लिए, related column changes को कई अलग-अलग UPDATE statements की बजाय एक ही में combine करें।
Warning: SET clause में %s placeholders का order parameter tuple में values के order से मेल खाना चाहिए, और अंतिम WHERE clause का placeholder उसी tuple में सबसे आखिर में आता है।

उदाहरण: Updating Multiple Columns at Once

python
from unittest.mock import MagicMock

conn = MagicMock()
cursor = conn.cursor()
cursor.execute(
    "UPDATE customers SET address = %s, city = %s WHERE id = %s",  # both columns changed together
    ("Canyon 123", "Denver", 1),
)
conn.commit()
print("Two columns updated in one statement")

एक साथ कई Rows Update करना

UPDATE का WHERE clause सिर्फ एक row से मेल खाने तक सीमित नहीं है -- एक broader condition (जैसे comparison operator या LIKE pattern) एक ही statement में कई rows से मेल खाकर उन्हें साथ update कर सकता है, ठीक वैसे ही जैसे एक broader WHERE किसी SELECT में कई rows return करता।

Note: एक साथ कई rows प्रभावित करने के इरादे से UPDATE चलाने से पहले, पहले broader WHERE condition को एक SELECT के रूप में test करें यह confirm करने के लिए कि ठीक कितनी rows मेल खाती हैं।
Warning: UPDATE में एक broad WHERE condition आपके अंदाज़े से ज़्यादा rows प्रभावित कर सकती है अगर वह जितना मान लिया गया उससे कम specific है -- यह एक overly broad DELETE जैसा ही खतरा है।

उदाहरण: Updating Multiple Rows at Once

python
from unittest.mock import MagicMock

conn = MagicMock()
cursor = conn.cursor()
cursor.execute("UPDATE customers SET city = %s WHERE city = %s", ("Austin", "austin"))  # broader WHERE can match several rows
conn.commit()
print("All rows matching the WHERE clause updated together")

Update Errors को Safely Handle करना

किसी UPDATE को try-except block में wrap करके mysql.connector.Error catch करना -- और except branch में conn.rollback() call करना -- आपको constraint violation जैसी failures को बिना crash किए साफ तरीके से handle करने देता है, database को एक consistent state में रखते हुए।

Note: हर write operation (UPDATE सहित) को try/except और failure पर एक explicit rollback() के साथ जोड़ें, हर write को एक all-or-nothing unit मानते हुए।
Warning: बिना rollback के बीच में fail होने वाला एक partially-applied multi-statement UPDATE sequence database को inconsistent, half-updated state में छोड़ सकता है।

उदाहरण: Handling Update Errors Safely

python
from unittest.mock import MagicMock

class Error(Exception):
    pass

conn = MagicMock()
cursor = conn.cursor()
cursor.execute.side_effect = Error("Constraint violation")
try:
    cursor.execute("UPDATE customers SET id = %s WHERE id = %s", (2, 1))
    conn.commit()
except Error as e:
    conn.rollback()  # keeps the database consistent after a failed update
    print("Update failed, rolled back:", e)
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.