首页 > 解决方案 > GCP App Engine 中的 Python 语法错误

问题描述

我正在尝试在 GCP 应用程序引擎中使用 python 建立与 MySQL 数据库的连接。目标是一个简单的测试,能够让它返回/打印数据库表的第一行。

使用我的 jupyter 笔记本,我可以使用sqlalchemyfor python 连接并打印第一行。

所以我尝试在应用引擎中修改最初的“hello world”教程来做同样的事情。但是当我将代码复制到文件中时,当我尝试在第 7 行main.py使用时,它给了我一个语法错误。create_enginge

任何人都知道为什么它是我main.py在应用程序引擎中的文件中的语法错误,而不是在 jupyter 笔记本中?

from flask import Flask
import pandas as pd
import sqlalchemy as sa
import pymysql
app = Flask(__name__)
@app.route('/')
engine = sa.create_engine('''mysql+pymysql://{username}:
                             {password}@{host}:{port}/{db_name}''')
with engine.connect() as conn:
    # Execute the query and fetch all results
    response = conn.execute(
        "SELECT * FROM table_name "
        "LIMIT 1"
    ).fetchall()
    # Print Results
    for row in response:
        print("sub_event_id = ", row[0], )
        print("event_type   = ", row[1])
        print("date_time    = ", row[2])
        print("ip           = ", row[3])
        print("property_id  = ", row[4])
        print("contact_id   = ", row[5])
        print("address_id   = ", row[6], "\n")
engine.dispose()

错误的屏幕截图

标签: pythonmysqlgoogle-app-enginegoogle-cloud-platformsqlalchemy

解决方案


@app.route 是一个装饰器,它需要一个函数来装饰,不能放在任何地方,像这样:

@app.route('/')
def hello_world():
    # your code here
    return 'Hello, World!'

您的问题不在于第 7 行的代码,而是您缺少前面的函数定义。我真的怀疑它在 Jupyter 中是否有效。


推荐阅读