为什么我的SQL命令无法在Web应用程序中与Postgresql一起使用?

时间:2020-08-08 19:21:56

标签: python postgresql cs50

我使用sqlite数据库创建了项目,但是,当我通过Heroku部署项目时,我将数据库更改为Postgresql。我遵循https://cs50.readthedocs.io/heroku/中的准则,并且我的应用程序已完美部署,但是当运行带有SQL命令的功能时,数据库和表未更新。此外,当用户登录但运行SQL命令时,该应用程序也会注销。您可以在https://desolate-temple-84845.herokuapp.com处查看我已部署的应用程序。当我在本地运行该应用程序时,它可以处理表已具有的信息,但不会更改数据库或表,但是终端会以绿色注册SQL命令。

我遇到了与这些用户相同的问题:https://github.com/cs50/python-cs50/issues/118。我尝试做用户建议的事情,但是他们没有建议使用Postgres解决方案,而是使用sqlalchemy。不幸的是,我对sqlalchemy不太了解,所以当出现一些错误时,我什么也做不了。请尝试帮助我使用Postgres解决此问题。

编辑:

为了将数据库与我包含的应用程序链接

db = SQL("postgres://")

其中postgres://是数据库URI。 这是包含用于注册用户的SQL命令的代码的一部分:

@app.route("/register", methods=["GET", "POST"])
def register():
"""Register user"""
if request.method == "POST":
    
    # Query database for username
    rows = db.execute("SELECT * FROM users WHERE username = :username;", username=request.form.get("username"))

    # Ensure username exists and password is correct
    if len(rows) == 1:
        flash("Taken username")
        return redirect("/register")
    else:
        numid = db.execute("SELECT COUNT(*) FROM users")
        numid = numid[0]["count"]
        numid += 1
        db.execute("BEGIN;")
        db.execute("INSERT INTO users (id, username, hash) VALUES(:id, :username, :hash);", id = numid, username = request.form.get("username"), hash = generate_password_hash(request.form.get("password")))
        db.execute("COMMIT;")
        return render_template("login.html")
else:
    return render_template("register.html")

此外,heroku日志不会显示错误。

0 个答案:

没有答案