我使用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日志不会显示错误。