如何以一种既适用于GAE又适用于本地测试环境的方式在python中以编程方式设置Google Cloud SQL?
当我在本地设置时,控制台总是说:
未安装或加载MySQLdb。
但是当我打开终端并编写python和python命令行时 环境运行。它在终端上运行良好,但在GAE中它表示 在GAE控制台中关注。
RDBMS API不可用,因为无法加载MySQLdb库。
我正在使用python 2.7.3 for GAE。
答案 0 :(得分:2)
您可以在以下链接中参考官方帮助/演练。
您需要遵循的重要事项是
您必须在python路径中安装MySQLdb库。按照其INSTALL指南,不要忘记更改下载文件夹中的site.cfg中的mysql_config变量,否则将无法安装。 设置site.cfg后运行以下命令。确保终端中的当前目录是您刚刚从MySQLdb link
下载的MySQLdbsudo /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()
答案 1 :(得分:0)
再次阅读你的问题之后,好像你说你已经安装了MySQLdb但它没有被GAE发现。假设路径不是问题,您使用的是最新版本的SDK吗?另外要检查的是运行时 - 您使用python27
作为GAE Python版本吗? Python 3.x与AppEngine不兼容,因此您将在python
的{{1}}字段中使用python27
或runtime
。不确定你是否说你可以在shell中导入它,但如果没有,你会想确保它在你的路径上(Linux:app.yaml
)。
要在本地使用Cloud SQL,您必须安装MySQLdb库。 MySQLdb是一个允许Python与MySQL数据库连接的库,当您在本地模拟Cloud SQL时,您正在做的是建立与本地MySQL数据库的连接。因此,您需要安装一个可以处理Python-&gt; MySQL交互的库,而MySQL是GAE所需的。
如果您使用的是Linux,请运行export PYTHONPATH="$PYTHONPATH:/path/to/MySQLdb/"
。如果你正在使用其他东西(甚至是Linux),你可以找到库here。