import webapp2
import MySQLdb
import os
class MainPage(webapp2.RequestHandler):
def get(self):
if (os.getenv('SERVER_SOFTWARE') and
os.getenv('SERVER_SOFTWARE').startswith('Google App Engine/')):
db = MySQLdb.connect(unix_socket='/cloudsql/fluent-outlet-604:test-db' , db='guestbook', user='root',passwd='root')
# connect to the cloud SQL
else:
db = MySQLdb.connect(host='173.194.248.221', port=3306, db='guestbook', user='root',passwd='root')
cursor = db.cursor()
cursor.execute('SELECT guestName, content, entryID FROM entries')
data = cursor.fetchall()
db.close()
self.response.write(data)
application = webapp2.WSGIApplication([
('/',MainPage),
],debug=True)
当我将此应用程序部署到应用程序引擎时,我获得错误说 "(1045,"拒绝访问用户' root' @' localhost'(使用密码:是)")
答案 0 :(得分:1)
我有同样的问题,并解决了它。 此问题出在Google Cloud SQL上。
在提示控制台中,重新启动Cloud SQL,如下所示,
gcloud sql instances --project [app engine project name] restart [sql instance name]
答案 1 :(得分:0)
从AppEngine连接时,不应指定root密码(即使已设置)。
从代码的第9行中删除 passwd 参数,使其如下所示:
db = MySQLdb.connect(unix_socket='/cloudsql/fluent-outlet-604:test-db' , db='guestbook', user='root')
this article中的示例代码也显示了这一点。
答案 2 :(得分:0)
当我没有在数据库URI中指定主机名时,我看到了这个问题:
SQLALCHEMY_DATABASE_URI = (
'mysql+pymysql://<user-name>:<password>@/<database-name>'
'?unix_socket=/cloudsql/<connection_name>'
将其更改为以下内容可修复该问题:
SQLALCHEMY_DATABASE_URI = (
'mysql+pymysql://<user-name>:<password>@<host-name>/<database-name>'
'?unix_socket=/cloudsql/{connection_name}'