python - 如何将 flask-sqlalchemy 与 Google Cloud Functions 一起使用?

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

如何整合 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 未使用此应用程序返回响应。

最佳答案

您可以改用 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)!"

关于python - 如何将 flask-sqlalchemy 与 Google Cloud Functions 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53822809/

相关文章:

Python 3.1 和 Sublime Text 2 错误

应用函数列表的 Pythonic 方式?

python - Docker容器在运行flask应用程序后立即退出

nginx 错误 403 - 目录索引被禁止

python - 在 numpy 中将 3 个一维数组连接在一起

python - signxml 抛出 "InvalidCertificate: [20, 0, ' 无法获取本地颁发者证书']”

Python3 - 如何正确地进行绝对导入并让 Pylint 开心

python - SQLAlchemy session 的正确用法

python - 为什么要删除文件末尾的导入?

python - 从具有匹配词的主列表生成列表,无论顺序如何