无法写入数据库psql - INSERT INTO语法

问题描述 投票:1回答:4

仍然是新的,但我有一个PSQL表连接到我的python(烧瓶)应用程序与此列描述

id整数自动递增[nextval('users_id_seq')]

名字变化

pw字符各不相同

电子邮件字符变化

以及用户访问@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行:INSERT INTO用户(名称,pw,电子邮件)VALUES(Name1,pw1,Email1)^提示:或许您打算引用“users.name”列。 [SQL:'INSERT INTO users(name,pw,email)VALUES(Name1,pw1,Email1)'](关于此错误的背景:http:// ***** / * / ***)

我使用heroku进行这个测试项目

python python-3.x postgresql flask-sqlalchemy
4个回答
1
投票

您不能像这样直接将变量传递给SQL查询。只有在您传入的值是文字时才能执行此操作。要传入变量,需要使用占位符。因此,db.execute行应更改为 - >

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

我们在这里做的是,我们用查询中的占位符替换变量,在它们前面使用冒号(:),然后将它们的值作为python字典传递。


0
投票

尝试使用Name1 pw1和Email1是变量。

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

0
投票

试试这个

db.execute("insert into users (name,pw,email) values (?, ?, ?)", (Name1,
pw1, Email1) )

0
投票

您还可以将值传递为:

query =“INSERT INTO users(name,pw,email)VALUES('%s','%s','%s')”%(Name1,pw1,Email1)db.execute(query)db.commit()

© www.soinside.com 2019 - 2024. All rights reserved.