代码之家  ›  专栏  ›  技术社区  ›  Dustin Ingram

如何将flask sqlAlchemy与google cloud函数结合使用?

  •  1
  • Dustin Ingram  · 技术社区  · 6 年前

    我怎么整合 flask-sqlalchemy 使用谷歌云功能和类似于云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云功能不能访问任何 应用程序 :

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

    用创建自己的应用程序 app = Flask(__name__) 不起作用,因为云函数不使用此应用程序返回响应。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Dustin Ingram    6 年前

    你可以使用 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)!"