📌  相关文章
📜  使用 Flask 设置 Google Cloud SQL

📅  最后修改于: 2022-05-13 01:54:28.305000             🧑  作者: Mango

使用 Flask 设置 Google Cloud SQL

设置数据库可能非常棘手,但有一些非常简单且可扩展的解决方案可用,其中一种解决方案是 Google Cloud SQL。 Cloud SQL 是一种完全托管的数据库服务,可让您轻松地在云中设置、维护和管理关系型 PostgreSQL 和 MySQL 数据库。设置它既棘手又简单,感到困惑吗?我来这里是为了消除混乱。

首先,您需要一个 Google Cloud Platform (GCP) 帐户。如果您不想要一个,请转到此处的此链接创建一个帐户。注册时,您还将获得一年 300 美元的免费积分。您还需要设置您的结算帐号才能使用包括 Cloud SQL 在内的一些 GCP 服务。如果您有免费积分,请不要担心本教程不会向您收费。

现在,您需要从市场启用Cloud SQL Admin API 。您可以通过单击此处的此链接来执行此操作。
现在,让我们进入 GCP 仪表板,然后搜索Cloud SQL 。您的 CLoud SQL 页面应如下所示。

GCP 信息中心

现在,单击CREATE INSTANCE ,然后在本教程中,我们将选择MySQL选项。现在,您应该会看到以下页面。

实例页面

现在,填写详细信息。始终建议生成密码,因为它会创建一个随机字符串并记下密码,因为如果您忘记它,您将无法找回它,并且还将区域更改为您在地理上最近的区域,然后单击创建。就这样。现在,下一页应该是这样的。

实例

现在,您首先需要创建一个数据库。为此,只需单击左侧导航栏上的“数据库”选项,然后单击“创建数据库”,然后提供数据库的名称。对于本教程,我们的数据库名称将是testing 。完成此操作后,您应该会在此处看到您的数据库。这就是设置部分。现在让我们实际看看如何从您的烧瓶应用程序连接到该数据库。

显然,您将需要Python。在本教程中,我们目前使用的是最新的Python版本 3.8
您还需要安装 flask、flask-sqlalchemy 和 mysqlclient。要安装它们,只需在终端中运行以下命令。

pip3 install Flask Flask-SQLAlchemy mysqlclient

注意:如果你在 Linux 机器上,那么你需要在安装 mysqlclient 之前安装libmysqlclient-dev 。要安装它,只需在终端中运行sudo apt-get install libmysqlclient-dev

完成所有先决条件后,让我们直接进入代码。为简单起见,我会将所有代码编写在一个文件中,但如您所知,如果您甚至计划构建一个中型应用程序,那么您需要为路由、模型等提供单独的文件。
在这里,整个代码将被写入一个名为app.py的文件中。我以内联注释的形式为代码中的每一行添加了解释。

Python3
# imports
from flask import Flask, request, make_response
from flask_sqlalchemy import SQLAlchemy
 
# initializing Flask app
app = Flask(__name__)
 
# Google Cloud SQL (change this accordingly)
PASSWORD ="your database password"
PUBLIC_IP_ADDRESS ="public ip of database"
DBNAME ="database name"
PROJECT_ID ="gcp project id"
INSTANCE_NAME ="instance name"
 
# configuration
app.config["SECRET_KEY"] = "yoursecretkey"
app.config["SQLALCHEMY_DATABASE_URI"]= f"mysql + mysqldb://root:{PASSWORD}@{PUBLIC_IP_ADDRESS}/{DBNAME}?unix_socket =/cloudsql/{PROJECT_ID}:{INSTANCE_NAME}"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"]= True
 
db = SQLAlchemy(app)
 
# User ORM for SQLAlchemy
class Users(db.Model):
    id = db.Column(db.Integer, primary_key = True, nullable = False)
    name = db.Column(db.String(50), nullable = False)
    email = db.Column(db.String(50), nullable = False, unique = True)
 
@app.route('/add', methods =['POST'])
def add():
    # getting name and email
    name = request.form.get('name')
    email = request.form.get('email')
 
    # checking if user already exists
    user = Users.query.filter_by(email = email).first()
 
    if not user:
        try:
            # creating Users object
            user = Users(
                name = name,
                email = email
            )
            # adding the fields to users table
            db.session.add(user)
            db.session.commit()
            # response
            responseObject = {
                'status' : 'success',
                'message': 'Successfully registered.'
            }
 
            return make_response(responseObject, 200)
        except:
            responseObject = {
                'status' : 'fail',
                'message': 'Some error occured !!'
            }
 
            return make_response(responseObject, 400)
         
    else:
        # if user already exists then send status as fail
        responseObject = {
            'status' : 'fail',
            'message': 'User already exists !!'
        }
 
        return make_response(responseObject, 403)
 
@app.route('/view')
def view():
    # fetches all the users
    users = Users.query.all()
    # response list consisting user details
    response = list()
 
    for user in users:
        response.append({
            "name" : user.name,
            "email": user.email
        })
 
    return make_response({
        'status' : 'success',
        'message': response
    }, 200)
 
 
if __name__ == "__main__":
    # serving the app directly
    app.run()


Python3
from app import db
db.create_all()


您需要更改代码中的以下占位符

  • PASSWORD:创建实例时为数据库设置的密码
  • PUBLIC_IP_ADDRESS:您的 GCP 实例公共 IP(可以在概览页面中找到)
  • DBNAME:您稍后创建的数据库的名称(对于本教程,它是“测试”)
  • PROJECT_ID:您的 GCP 项目 ID
  • INSTANCE_NAME:您的 Cloud SQL 实例名称

您的代码已准备就绪,但仍无法访问您的数据库。这是大多数人错误的地方。他们继续检查文档和他们的代码库,但他们没有发现错误,他们完全沮丧并放弃了,但我希望你不是放弃的人,对吧?所以,让我们看看还有什么要做。

您的代码无法访问您的数据库的原因是 GCP 默认会阻止来自未知来源的所有传入连接(出于安全目的)。因此,您现在需要做的就是将您的系统公共 IP 地址添加到授权网络。为此,首先,转到您的 Cloud SQL 实例页面并单击编辑按钮。你应该看到这样的页面

授权

在这里,单击公共 IP 下的添加网络按钮。在那里,您需要输入您的公共 IP 地址。如果您不知道您的公共 IP,请转到此链接。输入您的公共 IP 后,您就可以开始了。
现在,您的应用程序应该能够从您的系统连接到您的数据库。现在,在项目目录中打开终端并在其中键入Python 。这应该打开Python解释器。现在,只需在其中键入以下行即可从 ORM 创建表。

Python3

from app import db
db.create_all()

就这样。现在您已准备好测试您的应用程序。继续使用任何 API 请求工具来检查它是否有效。您可以使用著名的 Postman 进行测试。
将数据库托管在外部服务上的能力对于学生开发人员来说非常重要,否则就不可能展示您的项目。