не может записать в базу данных PSQL - INSERT INTO синтаксис - PullRequest
0 голосов
/ 15 сентября 2018

все еще новичок в этом, но у меня есть таблица PSQL, которая подключена к моему приложению python (flask) с этим описанием столбцов

id целое число Автоматическое увеличение [nextval ('users_id_seq')]]

имя изменяемого символа

значение изменяемого символа

символ электронной почты, изменяющийся

и эта функция, выполняемая после посещения пользователем @app.route("/registed" ,methods=["POST"])

def registed():
Name1 = "test"
Email1 = "test1"
pw1 = "test2"
pwh = "test3"


db.execute("INSERT INTO users (name,pw,email) VALUES (Name1,pw1,Email1)")
db.commit()

return render_template("registed.html",name=Name1,email=Email1,pw=pw1,pwh=pwh)

он продолжает поступать с этой ошибкой

ЛИНИЯ 1: ВСТАВИТЬ INTO пользователей (имя, адрес электронной почты) ЗНАЧЕНИЯ (Name1, pw1, Email1) ^ СОВЕТ: Возможно, вы имели в виду ссылку настолбец "users.name".[SQL: 'INSERT INTO users (name, pw, email) VALUES (Name1, pw1, Email1)'] (Справочная информация об этой ошибке: http://*****/*/***)

Я использовал heroku для этого тестового проекта

Ответы [ 4 ]

0 голосов
/ 17 сентября 2018

Вы также можете передать значения как:

query = "INSERT INTO users (name, pw, email) VALUES ('% s', '% s', '% s')"% (Name1, pw1, Email1) db.execute (запрос) db.commit ()

0 голосов
/ 15 сентября 2018

Вы не можете напрямую передавать переменные в SQL-запрос, как этот.Это можно сделать только в том случае, если значения, которые вы передаете, являются литералами.Для передачи переменных необходимо использовать заполнители .Таким образом, строка db.execute должна быть изменена на ->

db.execute("INSERT INTO users (name,pw,email) VALUES (:name,:pw,:email)", {"name":Name1, "pw":pw1, "email":Email1})

. Здесь мы заменяем переменные на заполнители в запросе, используя двоеточие (:) передих, а затем передать их значения в качестве словаря Python.

0 голосов
/ 15 сентября 2018

Попробуйте это

db.execute("insert into users (name,pw,email) values (?, ?, ?)", (Name1,
pw1, Email1) )
0 голосов
/ 15 сентября 2018

Попробуйте, так как Name1 pw1 и Email1 являются переменными.

db.execute("INSERT INTO users (name,pw,email) VALUES ("+Name1+","+pw1+","+Email1+")")
...