Python can';t写入数据库psql-插入语法

Python can';t写入数据库psql-插入语法,python,python-3.x,postgresql,flask-sqlalchemy,Python,Python 3.x,Postgresql,Flask Sqlalchemy,这仍然是新的,但我有一个连接到python(flask)应用程序的PSQL表 使用此列描述 id整数自动增量[nextval('users\u id\u seq')] 名称字符变化 字变 电子邮件字符变化 此函数在用户访问@app.route(“/registed”,methods=[“POST”])后执行 它总是带着这个错误来 第1行:插入用户(姓名、密码、电子邮件)值(姓名1、密码1、电子邮件1) ^ 提示:也许您想引用“users.name”列。 [SQL:'插入用户(名称、密码、电子邮件

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

id整数自动增量[nextval('users\u id\u seq')]

名称字符变化

字变

电子邮件字符变化

此函数在用户访问
@app.route(“/registed”,methods=[“POST”])后执行

它总是带着这个错误来

第1行:插入用户(姓名、密码、电子邮件)值(姓名1、密码1、电子邮件1) ^ 提示:也许您想引用“users.name”列。 [SQL:'插入用户(名称、密码、电子邮件)值(名称1、密码1、电子邮件1)'(此错误的背景信息:http://******//***)


我在这个测试项目中使用了heroku

尝试一下,因为Name1 pw1和Email1是变量

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

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

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

试试这个

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

您还可以通过以下方式传递值:

query=“在用户(名称、密码、电子邮件)中插入值(“%s”、“s”、“s”)”%(名称1、密码1、电子邮件1) db.execute(查询)
db.commit()

db.execute(“在用户(姓名、密码、电子邮件)中插入值(“+Name1+”、“+pw1+”、“+Email1+”)”),它不应该是封闭的吗?当然文档的作者太富表现力了;)但是,该规则可以阻止sql注入。也不起作用------[sql:“插入用户(姓名、密码、电子邮件)值(cxx、DASDAS、,xxxx@aaasda.aa)'](此错误的背景信息位于:http://***/***/***/db.execute(“插入到播放器(播放器名称)值(%(名称)s)”,{“名称”:名称})。尝试此操作后,
db.execute("INSERT INTO users (name,pw,email) VALUES (:name,:pw,:email)", {"name":Name1, "pw":pw1, "email":Email1})
db.execute("insert into users (name,pw,email) values (?, ?, ?)", (Name1,
pw1, Email1) )