【问题标题】:Setting a global DB connection in Google App Engine在 Google App Engine 中设置全局数据库连接
【发布时间】:2022-07-26 06:23:34
【问题描述】:

是否有建议的方法在 Google App Engine 中设置全局连接?我目前使用的方法似乎有点粗糙,我这样做是这样的:

import pymysql
from flask import Flask, jsonify

# lazy loading?
db_conn = None
db_cursor = None

def get_db():
    global db_conn, db_cursor
    if (db_conn, db_cursor) == (None, None):
        global_conn = pymysql.connect(user=\"x\", password=\"y\", database=\"z\", host=\"w\", charset=\'utf8\')
        global_cursor = conn.cursor()
    return (db_conn, db_cursor)

app = Flask(__name__)

@app.route(\'/\')
def hello():
    return jsonify(hello=\'world\')

@app.route(\'/db\')
def db():
    conn, cursor = get_db()
    cursor.execute(\"SELECT * FROM mytable LIMIT 50\")
    res = cursor.fetchall()
    return res

标签: python python-3.x google-app-engine google-cloud-platform


【解决方案1】:
  1. 由于数据库连接可能由于某种原因而被丢弃,因此 Google 建议使用连接池来连接数据库(请参阅documentation)。

  2. 他们还有一个worked example 用于作为连接池一部分的全局连接。在链接的示例中,您会注意到它们包含 cmets 以在您的应用程序加载后立即调用连接,而不是在第一次发出请求时调用

【讨论】:

    【解决方案2】:

    不算太差。但是,如果您的实例中总是需要数据库连接,那么您可以在运行时直接启动数据库连接

    import pymysql
    from flask import Flask, jsonify
    
    # eager loading?
    db_conn = pymysql.connect(user="x", password="y", database="z", host="w", charset='utf8')
    db_cursor = db_conn.cursor()
    
    app = Flask(__name__)
    ...
    

    代码比较简单,但是会影响你的启动时间。如果您一次需要数据库连接,请不要担心。但是,如果您的许多端点不需要数据库访问,则可能会很糟糕。这取决于你,一如既往,这取决于!

    【讨论】:

      猜你喜欢
      • 2011-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-22
      • 2018-04-28
      • 2020-12-25
      • 1970-01-01
      相关资源
      最近更新 更多