PageRenderTime 29ms CodeModel.GetById 20ms app.highlight 6ms RepoModel.GetById 1ms app.codeStats 0ms

/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