如何将MySQLdb代码连接到Google Cloud SQL?

时间:2019-06-02 12:08:19

标签: mysql flask google-cloud-platform mysql-python google-cloud-sql

我有一个烧瓶服务器,我想在Google Cloud Platform上进行部署。该代码使用MySQLdb库以以下方式与本地MySQL实例连接:

@app.route('/show_table', methods=['POST'])
def login():
    db = MySQLdb.connect("localhost", "root", "", "db_name")
    cursor = db.cursor()
    query = "select * from table_name;"
    cursor.execute(query)
    res = cursor.fetchall()
    return res, 200

但是我想将此代码连接到Cloud SQL,而不是本地MySQL实例,以便它从云中读取数据。我应该对此代码进行哪些更改?我目前在Google Cloud Platform中创建了一个项目,并在该项目中创建了一个Cloud SQL实例。我还通过以下方法在此实例中创建了所需的表 this教程。

1 个答案:

答案 0 :(得分:2)

您不必更改太多代码,而只取决于您将如何连接到数据库。 Google documentation包含有关如何从外部应用程序连接到Cloud SQL的逐步信息。

由于您没有使用Java或GO,因此有两种选择:

  
      
  1. 使用Cloud SQL代理
  2.   
  3. 在Cloud SQL实例页面上将服务器的公共IP地址列入白名单
  4.   

所有步骤都在文档中,但是基本上说如果使用代理,则需要启用Cloud SQL Admin API,在本地计算机上安装代理客户端并进行身份验证。 authentication options很少,但是recommended way是使用控制台从服务帐户创建凭证文件,并在首次启动代理时将其作为参数传递的。掌握了proxy running之后,本文档将提供有关如何使用TCP或UNIX套接字connect的示例。使用TCP,您将以localhost身份使用代理,因此不必更改代码。使用UNIX套接字,您将使用实例连接名称,该名称将在GCP控制台的实例详细信息中找到。 MySQLdb同时支持。

使用second option,您需要允许从特定IP地址范围访问Cloud SQL实例。转到Cloud SQL实例详细信息页面中的连接选项卡,然后添加要用于连接到数据库的IP地址(使用CIDR表示法)。将其列入白名单后,您就可以使用Cloud SQL实例的公共IP(可以在实例详细信息中找到)代替localhost来连接数据库。