/SQLAlchemy-0.7.8/lib/sqlalchemy/dialects/mysql/gaerdbms.py
Python | 61 lines | 40 code | 0 blank | 21 comment | 0 complexity | bd1e5b30e83372df0344673357c5b41f MD5 | raw file
1# mysql/gaerdbms.py
2# Copyright (C) 2005-2012 the SQLAlchemy authors and contributors <see AUTHORS file>
3#
4# This module is part of SQLAlchemy and is released under
5# the MIT License: http://www.opensource.org/licenses/mit-license.php
6"""Support for Google Cloud SQL on Google App Engine.
7
8This dialect is based primarily on the :mod:`.mysql.mysqldb` dialect with minimal
9changes.
10
11.. versionadded:: 0.7.8
12
13Connecting
14----------
15
16Connect string format::
17
18 mysql+gaerdbms:///<dbname>
19
20E.g.::
21
22 create_engine('mysql+gaerdbms:///mydb',
23 connect_args={"instance":"instancename"})
24
25Pooling
26-------
27
28Google App Engine connections appear to be randomly recycled,
29so the dialect does not pool connections. The :class:`.NullPool`
30implementation is installed within the :class:`.Engine` by
31default.
32
33"""
34
35from sqlalchemy.dialects.mysql.mysqldb import MySQLDialect_mysqldb
36from sqlalchemy.pool import NullPool
37import re
38
39
40class MySQLDialect_gaerdbms(MySQLDialect_mysqldb):
41
42 @classmethod
43 def dbapi(cls):
44 from google.appengine.api import rdbms
45 return rdbms
46
47 @classmethod
48 def get_pool_class(cls, url):
49 # Cloud SQL connections die at any moment
50 return NullPool
51
52 def create_connect_args(self, url):
53 return [[],{'database':url.database}]
54
55 def _extract_error_code(self, exception):
56 match = re.compile(r"^(\d+):").match(str(exception))
57 code = match.group(1)
58 if code:
59 return int(code)
60
61dialect = MySQLDialect_gaerdbms