【问题标题】:can't write to database psql - INSERT INTO syntax无法写入数据库 psql - INSERT INTO 语法
【发布时间】:2018-09-15 11:22:24
【问题描述】:

对此仍然很陌生,但我有一个连接到我的 python(flask) 应用程序的 PSQL 表 带有此列的说明

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 行:插入用户(姓名、密码、电子邮件)值(姓名 1、密码 1、电子邮件 1) ^ 提示:也许您的意思是引用“users.name”列。 [SQL: 'INSERT INTO users (name,pw,email) VALUES (Name1,pw1,Email1)'] (此错误的背景:http://*****/*/***)

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

【问题讨论】:

  • db.execute("INSERT INTO users (name,pw,email) VALUES ('+Name1+','+pw1+','+Email1+')"),不应该合并吗?

标签: python python-3.x postgresql flask-sqlalchemy


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    试试这个,因为 Name1 pw1 和 Email1 是变量。

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

    【讨论】:

    【解决方案3】:

    试试这个

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

    【讨论】:

      【解决方案4】:

      您也可以将值传递为:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多