ввод var во вставку с использованием python - PullRequest
0 голосов
/ 23 мая 2018

Я использую python 2.7 и postgresql 10.0.

В целях обучения я пытаюсь получить пользователя raw_input и поместить его во вставку, но независимо от того, что я делаю, будет ли это% s или {}и используя .format я получаю ошибки.все значения являются строковыми, кроме age (int)

конкретно

    with conn:
        c.execute("INSERT INTO people(person_first, person_last, person_email, 
            person_age) VALUES ({}, {}, {}, {})".format(person_first, person_last, 
            person_email, person_age))

дает мне не строковые значения (из входных данных)

, а метод% s выдает ошибкув первом '%' ЗНАЧЕНИЯХ (% s,% s,% s,% s)

также предпринимаются попытки ЗНАЧЕНИЯ (?,?,?,?) и также неудачные, аналогичные% s

1 Ответ

0 голосов
/ 27 мая 2018

Код, как вставлено, выглядит неправильно.У вас есть with conn и c.execute.Предполагая, что c - курсор, а conn - соединение, способ их использования будет выглядеть следующим образом: with conn.cursor() as c:.Курсор - это менеджер контекста, который будет корректно очищаться при выходе из блока with.

Кроме того, не привыкать использовать .format() в SQL.Это будет 1) вектор для уязвимостей SQL-инъекций и 2) он сломается, если на входе будет один символ кавычки.

Итак, объединяя эти две точки, ваш код должен выглядеть следующим образом:

with conn.cursor() as c:
    c.execute("INSERT INTO people(person_first, person_last, person_email, 
        person_age) VALUES (%s, %s, %s, %s)", (person_first, person_last, 
        person_email, person_age,))

Обратите внимание, что параметры передаются в виде кортежа непосредственно в execute;драйвер проанализирует запрос, переведет его в соответствующий SQL / параметр для сервера, управляет цитированием и т. д. Если вы все еще видите ошибки, опубликуйте трассировку.

См. также -

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...