psycopg2.errors.SyntaxError: синтаксическая ошибка в или около ' - PullRequest
0 голосов
/ 16 апреля 2020

Я хотел бы добавить новое сообщение в мою таблицу 'message': d'eau, но я получил эту ошибку: (ps, у меня нет ошибки, когда я добавляю другое сообщение типа 'problème' или другой тип акцентов) Как можно решить?

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 Ответ

0 голосов
/ 16 апреля 2020

Вы пытаетесь написать сообщение в самом тексте запроса, заключенном в простые кавычки. Это плохо, потому что он был источником SQL атак внедрения в течение десятилетий, и рекомендуемый способ - использовать параметризованные запросы.

Но здесь, когда ваш текст содержит простую цитату, такую ​​как "d'eau", запрос строка заканчивается на:

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

По крайней мере, это должно было быть ...VALUES('d''eau',...), удваивающее оскорбительную цитату. Это причина ошибки.

По всем этим причинам вам следует использовать параметризованный запрос:

DB_Protocole.cur.execute("INSERT INTO message (message, published_on, active) VALUES (?,NOW(),True)", [message])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...