Python Heroku sqlite3现有表不存在

时间:2018-12-09 23:45:49

标签: python heroku flask sqlite

我正在尝试使用Flask将SQLite数据库移动到Heroku,以便可以从一些设备访问它。我将数据库推送到我在本地创建的Heroku中,因此我知道该表存在。

Client.py

import requests, json
url = "https://someidijustmadeup.herokuapp.com/select"
j = {}
j["sql"] = "SELECT * FROM COMICS"
r = requests.get(url, json = j)
print("Status Code", r.status_code)
rJson = json.loads(r.content.decode("utf-8"))
print(len(rJson))

Server.py

import os

from flask import (Flask, jsonify, request)

from functions.functions import (executeSqlRequest)

host = "0.0.0.0"

app = Flask(__name__)

@app.route("/select", methods = ["GET"])
def select():
    rJson = request.get_json()

    # Ignore the values, SELECT doesn't need them
    returnDict = executeSqlRequest(rJson.get("sql", None), None)

    return jsonify(returnDict)

if (__name__ == "__main__"):
    port = int(os.environ.get("PORT", 5000))
    app.run(host = host, port = port)

executeSqlRequest只是查询数据库。实际的Flask应用程序很好,我可以连接到它并运行查询。

信息

  1. 该数据库文件确实存在并且正在连接,我已经检查过了。
  2. 我已经在Heroku服务器上远程运行cat database.db,并且在输出中我可以看到数据库中的行,因此我知道数据在那里。它还向我显示了表的SQL。

1 个答案:

答案 0 :(得分:1)

Heroku测功机有一个ephemeral filesystem:在测功机重新启动时happens frequently(每天至少一次),您所做的任何更改都会丢失。由于SQLite是基于文件的数据库,因此与Heroku不兼容。

好消息是Heroku对客户端服务器数据库(如PostgreSQL)具有良好的支持。实际上,默认情况下它提供了PostgreSQL databaseDATABASE_URL环境变量将为您提供用于连接到该数据库的坐标。

如果不是Postgres,您可以从插件列表中选择another data store