如何以在 GAE 和本地测试环境中都适用的方式在 python 中以编程方式设置谷歌云 SQL?
当我在本地设置时,控制台总是说:
MySQLdb 未安装或加载。
但是当我打开终端并编写 python 和 python 命令行环境运行时。它在终端中运行良好,但在 GAE 中它在 GAE 控制台中显示以下内容。
RDBMS API 不可用,因为无法加载 MySQLdb 库。
我正在为 GAE 使用 python 2.7.3。
如何以在 GAE 和本地测试环境中都适用的方式在 python 中以编程方式设置谷歌云 SQL?
当我在本地设置时,控制台总是说:
MySQLdb 未安装或加载。
但是当我打开终端并编写 python 和 python 命令行环境运行时。它在终端中运行良好,但在 GAE 中它在 GAE 控制台中显示以下内容。
RDBMS API 不可用,因为无法加载 MySQLdb 库。
我正在为 GAE 使用 python 2.7.3。
您可以在下面的链接中参考官方帮助/演练。
您需要遵循的重要事项是
你必须在你的 python 路径中安装MySQLdb库。按照它的安装指南,不要忘记更改下载文件夹中可用的 site.cfg 中的 mysql_config 变量,否则将无法安装。设置好 site.cfg 后运行以下命令。确保终端中的当前目录是您刚刚从MySQLdb 链接下载的 MySQLdb
sudo /System/Library/Frameworks/Python.framework/Versions/2.7/bin/python setup.py install
在本地 MySql 中创建一个测试数据库或在该本地数据库中导入实时转储,以便本地和实时环境的表结构相同
import os
import MySQLdb
import webapp2
INSTANCE_NAME = 'your-project-id:your-instance-name'
class SQ(webapp2.RequestHandler):
def get(self):
# Display existing guestbook entries and a form to add new entries.
if (os.getenv('SERVER_SOFTWARE') and
os.getenv('SERVER_SOFTWARE').startswith('Google App Engine/')):
db = MySQLdb.connect(unix_socket='/cloudsql/' + INSTANCE_NAME, db='guestbook', user='root')
else:
db = MySQLdb.connect(host='127.0.0.1', port=3306, db='guestbook', user='root')
cursor = db.cursor()
cursor.execute('select id,guestName,content from enteries')
for row in cursor.fetchall():
self.response.write("(id) " + str(row[0]) + " | (name) " + str(row[1]) + " | (content) " + str(row[2]) + "</BR>" )
db.close()
再次阅读您的问题后,您似乎在说您已经安装了 MySQLdb,但 GAE 没有发现它。假设路径不是问题,您使用的是最新版本的 SDK 吗?要检查的另一件事是您的运行时 - 您是否使用python27
GAE Python 版本?Python 3.x 与 AppEngine 不兼容python
,因此您将python27
在runtime
. app.yaml
不确定您是否说可以在 shell 中正常导入它,但如果不是,您需要确保它在您的路径上(Linux: export PYTHONPATH="$PYTHONPATH:/path/to/MySQLdb/"
)。
为了在本地使用 Cloud SQL,您必须安装 MySQLdb 库。MySQLdb 是一个允许 Python 连接 MySQL 数据库的库,当您在本地模拟 Cloud SQL 时,您所做的就是建立与本地 MySQL 数据库的连接。因此,您需要安装一个可以处理 Python->MySQL 交互的库,而 GAE 需要的是 MySQLdb。
如果您在 Linux 上,请运行sudo apt-get install python-mysqldb
. 如果您使用其他东西(甚至是 Linux),您可以在此处找到该库。