In the meantime, I have solved the syntax error above (there was a "-" in 
the data base name...), and I have successfully connected to a 2nd 
generation Google SQL instance !!!!

To do this, i had to hack pyDAL. I would appreciate of someone could look 
at what I have done, and tell me if this is a viable long term solution, or 
i will be running into some problems later. (I have not fully tested my app 
on the new DB yet.)

So I have added this to app.yaml:

env_variables:
    CLOUDSQL_USER: root
    CLOUDSQL_PASSWORD: password
    CLOUDSQL_CONNECTION_NAME: myproject:europe-west1:myinstance
    CLOUDSQL_DATABASE: mydbname
    
libraries:
- name: MySQLdb
  version: "latest" 


Then I changed google_adapters.py :

*import MySQLdb*



class GoogleSQLAdapter(UseDatabaseStoredFile, MySQLAdapter):
    uploads_in_blob = True

    REGEX_URI = re.compile('^(?P<instance>.*)/(?P<db>.*)$')

    def clear_cache(self):
        ndb.get_context().clear_cache()

    def ignore_cache_for(self, entities = None):
        entities = entities or []
        ndb.get_context().set_cache_policy(lambda key: key.kind() not in 
entities)

    def __init__(self, db, uri='google:sql://realm:domain/database',
                 pool_size=0, folder=None, db_codec='UTF-8',
                 credential_decoder=IDENTITY, driver_args={},
                 adapter_args={}, do_connect=True, after_connection=None):

        self.db = db
        self.dbengine = "mysql"
        self.uri = uri
        self.pool_size = pool_size
        self.db_codec = db_codec
        self._after_connection = after_connection
        if do_connect: self.find_driver(adapter_args, uri)
        self.folder = folder or pjoin('$HOME',THREAD_LOCAL.folder.split(
                os.sep+'applications'+os.sep,1)[1])
        ruri = uri.split("://")[1]
        m = self.REGEX_URI.match(ruri)
        if not m:
            raise SyntaxError("Invalid URI string in SQLDB: %s" % self.uri)
        instance = credential_decoder(m.group('instance'))
        self.dbstring = db = credential_decoder(m.group('db'))
        driver_args['instance'] = instance
        
*        #KK's addition to attempt fix 2nd gen problem with missing user 
name and password:*
*        driver_args['user'] = os.environ.get('CLOUDSQL_USER')*
*        driver_args['passwd'] = os.environ.get('CLOUDSQL_PASSWORD') *
*        driver_args['unix_socket'] = os.path.join('/cloudsql', 
os.environ.get('CLOUDSQL_CONNECTION_NAME')) *
*        del driver_args['instance']*
*        #driver_args['database'] = os.environ.get('CLOUDSQL_DATABASE')     
  *
*        #END KK*
        
        if not 'charset' in driver_args:
            driver_args['charset'] = 'utf8'
        self.createdb = createdb = adapter_args.get('createdb',True)
        if not createdb:
            driver_args['database'] = db
            
        #KK added this for debug:
        print "DEBUG: driver args = " + str(driver_args) 
        print "DEBUG: self.dbstring = " + str(self.dbstring)   
        #END KK    
        
        *#KK changed rdbms to MySQLdb: *   
        def connector(driver_args=driver_args):
            return *MySQLdb*.connect(**driver_args)
        self.connector = connector
        if do_connect: self.reconnect()

    def after_connection(self):
        if self.createdb:
            # self.execute('DROP DATABASE %s' % self.dbstring)
            self.execute('CREATE DATABASE IF NOT EXISTS %s' % self.dbstring)
            self.execute('USE %s' % self.dbstring)
        self.execute("SET FOREIGN_KEY_CHECKS=1;")
        self.execute("SET sql_mode='NO_BACKSLASH_ESCAPES';")

    def execute(self, command, *a, **b):
        return self.log_execute(command.decode('utf8'), *a, **b)

    def find_driver(self,adapter_args,uri=None):
        self.adapter_args = adapter_args
        self.driver = "google"

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to