diff --git a/appengine/cloudsql/README.md b/appengine/cloudsql/README.md new file mode 100644 index 000000000000..c0724188a61b --- /dev/null +++ b/appengine/cloudsql/README.md @@ -0,0 +1,7 @@ +This is an example program showing how to use the native MySQL connections from Google App Engine to Google Cloud SQL. + +## Deploying + +1. Edit the `unix_socket` in `main.py` to point to a Cloud SQL instance. + +2. Upload the app: `appcfg.py update .`. diff --git a/appengine/cloudsql/app.yaml b/appengine/cloudsql/app.yaml new file mode 100644 index 000000000000..58843564e0e4 --- /dev/null +++ b/appengine/cloudsql/app.yaml @@ -0,0 +1,11 @@ +runtime: python27 +api_version: 1 +threadsafe: yes + +handlers: +- url: / + script: main.app + +libraries: +- name: MySQLdb + version: "latest" diff --git a/appengine/cloudsql/main.py b/appengine/cloudsql/main.py new file mode 100644 index 000000000000..1f4ee3e87057 --- /dev/null +++ b/appengine/cloudsql/main.py @@ -0,0 +1,39 @@ +# Copyright 2013 Google Inc. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import os + +import MySQLdb +import webapp2 + + +class IndexPage(webapp2.RequestHandler): + def get(self): + self.response.headers['Content-Type'] = 'text/plain' + + if os.getenv('SERVER_SOFTWARE', '').startswith('Google App Engine/'): + db = MySQLdb.connect( + unix_socket='/cloudsql/my_project:my_instance', + user='root') + else: + db = MySQLdb.connect(host='localhost', user='root') + + cursor = db.cursor() + cursor.execute('SHOW VARIABLES') + for r in cursor.fetchall(): + self.response.write('%s\n' % str(r)) + + +app = webapp2.WSGIApplication([ + ('/', IndexPage), +], debug=True)