【问题标题】:How can I use flask-sqlalchemy with Google Cloud Functions?如何将 flask-sqlalchemy 与 Google Cloud Functions 一起使用?
【发布时间】:2019-05-18 06:25:34
【问题描述】:

如何将flask-sqlalchemy 与 Google Cloud Functions 和 Cloud SQL 之类的东西集成?

查看minimal application example,它包装了app变量:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

    def __repr__(self):
        return '<User %r>' % self.username

但我的 Google Cloud Function 无法访问任何名为 app 的内容:

def my_function(request):
    return "Hello world!"

使用 app = Flask(__name__) 创建我自己的应用程序不起作用,因为 Cloud Functions 不使用此应用程序来返回响应。

【问题讨论】:

    标签: python python-3.x flask google-cloud-platform google-cloud-functions


    【解决方案1】:

    您可以改用flask.current_app。您还必须配置 flask-sqlalchemy 以使用 CloudSQL 提供的 Unix 域套接字:

    from flask import current_app as app
    from flask_sqlalchemy import SQLAlchemy
    
    # Set these in the environment variables for the function
    db_user = os.environ.get('CLOUD_SQL_USERNAME')
    db_password = os.environ.get('CLOUD_SQL_PASSWORD')
    db_name = os.environ.get('CLOUD_SQL_DATABASE_NAME')
    db_connection_name = os.environ.get('CLOUD_SQL_CONNECTION_NAME')
    
    # This is for Postgres, it's similar for MySQL
    app.config['SQLALCHEMY_DATABASE_URI'] = f'postgresql://{db_user}:{db_password}@/{db_name}?host=/cloudsql/{db_connection_name}'
    
    # This must be set, determine which is best for you
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    
    db = SQLAlchemy(app)
    ...
    

    然后你可以在你的函数中查询User模型:

    def my_function(request):
        user = User.query.first()
        return f"Hello {user.username)!"
    

    【讨论】:

      猜你喜欢
      • 2020-11-11
      • 1970-01-01
      • 1970-01-01
      • 2015-01-05
      • 2017-09-04
      • 1970-01-01
      • 2013-10-07
      • 2019-05-28
      • 2012-06-01
      相关资源
      最近更新 更多