मैं अपनी तालिका 'संदेश' में नया संदेश जोड़ना चाहता हूं: डी'ओयू, लेकिन मुझे यह त्रुटि मिली: (पीएस जब मैं 'समस्या' या किसी अन्य प्रकार के उच्चारण जैसे अन्य संदेश जोड़ता हूं तो मुझे त्रुटि नहीं होती है) कैसे हल कर सकते हैं यह?

psycopg2.errors.SyntaxError: syntax error at or near "eau"
LINE 1: ...essage (message, published_on, active) VALUES ('d'eau',NOW()...
                                                             ^

वह मेरा कार्य:

def post_new_message():
    ConnexionDB()

    message = request.form["message"]
    sql_set_all_message_to_false = "UPDATE message SET active = False"
    DB_Protocole.cur.execute(sql_set_all_message_to_false)
    DB_Protocole.conn.commit()
    sql_insert_message = "INSERT INTO message (message, published_on, active) VALUES ('"+message+"',NOW(),True)"
    DB_Protocole.cur.execute(sql_insert_message)
    DB_Protocole.conn.commit()
    DeconnexionDB()

    return redirect(url_for("get_message"))
-1
Z.Dubeau 16 अप्रैल 2020, 12:03

1 उत्तर

सबसे बढ़िया उत्तर

आप संदेश को सरल उद्धरणों में संलग्न क्वेरी टेक्स्ट में ही लिखने का प्रयास कर रहे हैं। यह खराब है क्योंकि यह दशकों से SQL इंजेक्शन हमलों का स्रोत रहा है, और अनुशंसित तरीका पैरामीटरयुक्त प्रश्नों का उपयोग करना है।

लेकिन यहां जब आपके टेक्स्ट में "d'eau" जैसा एक साधारण कोट होता है, तो क्वेरी स्ट्रिंग इस पर समाप्त होती है:

...VALUES('d'eau',...)

कम से कम यह ...VALUES('d''eau',...) आपत्तिजनक बोली को दोगुना करना चाहिए था। यही त्रुटि का कारण है।

उन सभी कारणों से, आपको एक पैरामीटरयुक्त क्वेरी का उपयोग करना चाहिए:

DB_Protocole.cur.execute("INSERT INTO message (message, published_on, active) VALUES (?,NOW(),True)", [message])
0
Serge Ballesta 16 अप्रैल 2020, 09:16