如何从我在 Google App Engine SDK 上运行的 Python 应用程序访问本地 MySQL 实例?

Posted

技术标签:

【中文标题】如何从我在 Google App Engine SDK 上运行的 Python 应用程序访问本地 MySQL 实例?【英文标题】:How to access a local MySQL instance from my Python app running on Google App Engine SDK? 【发布时间】:2013-02-19 05:48:11 【问题描述】:

最近,我正在阅读 Google Developers Academy 网站上的“将 Python App Engine 与 Google Cloud SQL 结合使用”教程。但是,我偶然发现了练习“使用本地 mysql 实例构建应用程序”的第一部分。我无法将示例代码 (main.py) 连接到我的本地 MySQL 实例。想知道是否有人找到了解决此问题的方法。

如果您能与我分享您是如何设置 MySQL 并对其进行配置以便 GAE 的沙箱能够访问 MySQL-python 连接器,那就太好了。

【问题讨论】:

【参考方案1】:

由于我是 GAE、Python、MySQL 和使用 GAE 在 Mac OS X 上开发的新手,我确实花了一段时间才弄清楚如何让示例应用程序正常工作。既然我已经找到了解决方案,我想在这里分享它,这样您就可以按照我的步骤在您的本地 GAE SDK 环境中使用本地 MySQL 实例启动并运行示例应用程序。

就我个人而言,我发现这非常有用且方便,因为对于开发人员来说,在将 GAE 应用程序部署到 Google App Engine PaaS 上之前,在他们自己的机器上使用本地 MySQL 实例开发他们的 GAE 应用程序是很自然的。

不多说了,下面是我要分享的过程:

    从 mysql.com 社区站点安装 MySQL dmg(我的版本是 mysql-5.5.30-osx10.6-x86_64.dmg)

    修改您的 ~/.profile 以添加这些环境变量(添加这些行) export PATH=/usr/local/mysql/bin:$PATH (或您安装的任何 MySQL 版本) 导出 DYLD_LIBRARY_PATH=/usr/local/mysql/lib/

    如果您尚未从 Apple 的 AppStore 安装 Xcode。然后确保您还从首选项“下载”部分安装了“命令行工具”。这一步是必要的,因为它将安装一个 gcc 编译器(位于我的文件系统:/usr/llvm-gcc-4.2/bin/llvm-gcc-4.2)以在下面的第 4 步中构建 MySQL-python 连接器。

    然后运行“sudo easy_install MySQL-python”(这样您就可以将应用程序连接到 Mac 上的本地 MySQL 实例)

    由于适用于 Python 的 Google App Engine SDK 是沙箱环境,因此您需要在此文件 /usr/local/bin/dev_appserver.py 中添加“import MySQLdb”,以将 GAE 的沙箱环境桥接到本地 MySQL 实例。您需要在“main.py”文件的 [示例代码][2] 中进行以下更改。如下才能正确运行示例代码:

    在“import”部分添加“import MySQLdb”语句。 将“CLOUDSQL_INSTANCE = ''”语句替换为“CLOUDSQL_INSTANCE = 'localhost'”。 需要重写“get_connection()”函数,因为 MySQLdb 包是 MySQL 的 DB API v2.0 兼容接口。 MySQLdb的“connect()”函数不理解参数:“instance”、“database”和“password”。要使用 MySQLdb 包访问本地 MySQL 实例,您需要重写“get_connection”函数,如下所示:
    
    def get_connection():
    return MySQLdb.connect(host=CLOUDSQL_INSTANCE, db=DATABASE_NAME,
    user=USER_NAME, passwd=PASSWORD, charset='utf8')
    

    完成上述所有步骤后,您现在可以通过执行以下命令启动示例应用程序:“dev_appserver.py”。在您的应用程序目录中。

    如果您使用默认的 8080 端口,您可以将浏览器指向 http://localhost:8080

    享受乐趣。

【讨论】:

【参考方案2】:

我在某个项目之前设法做到了这一点。程序如下(适用于Windows):

    安装mysql服务器MYSQL 在安装过程中注意 用户名和密码以及实例的名称应该是 像 MySQL55 下载并安装 mysql python 连接器MYSQL Python Connector 确保 Mysql 服务器正在运行

    在您的应用中插入以下导入行:

    from google.appengine.api import rdbms
    

5 .我所做的是创建一个返回数据连接的函数,如下所示:

def conn_to_db():
return rdbms.connect(instance='MySQL55', database='Your_db_name_here', user='root', password='whatever_password_you_chose')

然后查询数据库:

conn = conn_to_db()
cursor = conn.cursor()
cursor.execute('SELECT * FROM foo where foos = %s', (bar))
for row in cursor.fetchall():
    var1 = row[0]
    var2 = row[1]
conn.close()

【讨论】:

以上是关于如何从我在 Google App Engine SDK 上运行的 Python 应用程序访问本地 MySQL 实例?的主要内容,如果未能解决你的问题,请参考以下文章

Paypal Sandbox 和 Google App Engine 的身份验证错误

无法从 PHP Google App Engine 与 *.roblox.com 通信

如何在 Google App Engine app.yaml 中处理尾部斜线

如何在 Google App Engine 中创建版本号

连接到 Google App Engine 数据存储

如何知道 Google App Engine(python)中实体的现有子项?