Как я могу использовать флеш-sqlalchemy с облачными функциями Google? - PullRequest
0 голосов
/ 17 декабря 2018

Как я могу интегрировать flask-sqlalchemy с облачными функциями Google и чем-то вроде Cloud SQL?

Если посмотреть на минимальный пример приложения , он обернет app variable:

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 не имеет доступа к чему-либо, называемому app:

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

Создание собственного приложения с app = Flask(__name__) не работаеттак как это приложение не используется Cloud Functions для возврата ответа.

1 Ответ

0 голосов
/ 17 декабря 2018

Вместо этого вы можете использовать flask.current_app.Вам также потребуется настроить flask-sqlalchemy для использования доменного сокета Unix, предоставляемого CloudSQL:

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)!"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...