托管烧瓶 API

时间:2021-03-19 16:25:28

标签: python postgresql heroku sqlalchemy heroku-postgres

如果我的一些术语在这里不合适,请原谅我,我对这一切都不熟悉。

我已经构建了一个从我的 PostgreSQL 数据库中获取数据的 python-flask API。我试图让我的 API 托管在 Heroku 上,但我认为它不成功,因为我的 API 使用我的 postgres 用户名和密码连接到本地主机。我需要先托管我的数据库,然后才能在 Heroku 上托管我的 API。

谢谢

app.py

import pandas as pd
import psycopg2
import sqlalchemy
from sqlalchemy import create_engine
from flask import Flask, jsonify, request, render_template
from flask_cors import CORS
from fuzzywuzzy import fuzz

# Postgres username, password, and database name
username = 'postgres'
password = 'XXXXXXXXXX' # postgres password
host = 'localhost'
port = '5432'
database = 'test'

# string that contains necessary postgres login info
postgres_str = ('postgresql://{username}:{password}@{ipaddress}:{port}/{database}'
                .format(username=username,
                        password=password,
                        ipaddress=host,
                        port=port,
                        database=database
                        ))
               
# create the connection
conn = create_engine(postgres_str)

app = Flask(__name__)
CORS(app=app)

@app.route('/bamboo/<product>', methods=['GET'])
def getProducts(product):

    # GET request
    if request.method == 'GET':
        
        query = """select a.*, b.logo
                   from products a
                   left join companies b on a.company_name = b.company_name
                   where CAST(product_price as int) != 0
                   """
        
        df = pd.read_sql_query(query, conn)

        final_results = df.to_json(orient='records')

        return final_results  # serialize and use JSON headers


if __name__ == '__main__':
    # run!
    app.run()

1 个答案:

答案 0 :(得分:0)

是的。您需要先托管数据库。为此,您可以使用 Heroku CLI

因此,首先进入您的终端并使用以下命令登录您的 Heroku 帐户并按 Enter,您将看到一条包含您的帐户名称的成功登录消息。

$ heroku login

现在使用以下命令为您的应用创建一个数据库,

$ heroku addons:create heroku-postgresql:hobby-dev --app app_name

现在,在创建数据库后,使用以下命令获取数据库的 URL,

$ heroku config --app app_name

有关详细信息,请参阅 thisthis