]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
o default Connector/J's characterEncoding=UTF-8 for generally better JDBC
authorPhilip Jenvey <pjenvey@underboss.org>
Tue, 11 Aug 2009 04:16:48 +0000 (04:16 +0000)
committerPhilip Jenvey <pjenvey@underboss.org>
Tue, 11 Aug 2009 04:16:48 +0000 (04:16 +0000)
unicode handling
o pass url query params down as jdbc connect opts

lib/sqlalchemy/connectors/zxJDBC.py
lib/sqlalchemy/dialects/mysql/zxjdbc.py
lib/sqlalchemy/dialects/oracle/zxjdbc.py

index 3cdfeb32e46bf8c8cbead1878ecaeabcf3f7593c..69f48082f169489cd1a26f29ddc93495f4f9a523 100644 (file)
@@ -21,16 +21,19 @@ class ZxJDBCConnector(Connector):
         return zxJDBC
 
     def _driver_kwargs(self):
-        """return kw arg dict to be sent to connect()."""
+        """Return kw arg dict to be sent to connect()."""
         return {}
         
-    def create_connect_args(self, url):
-        hostname = url.host
-        dbname = url.database
-        d, u, p, v = ("jdbc:%s://%s/%s" % (self.jdbc_db_name, hostname, dbname),
-                      url.username, url.password, self.jdbc_driver_name)
-        return [[d, u, p, v], self._driver_kwargs()]
+    def _create_jdbc_url(self, url):
+        """Create a JDBC url from a :class:`~sqlalchemy.engine.url.URL`"""
+        return "jdbc:%s://%s/%s" % (self.jdbc_db_name, url.host, url.database)
         
+    def create_connect_args(self, url):
+        opts = self._driver_kwargs()
+        opts.update(url.query)
+        return [[self._create_jdbc_url(url), url.username, url.password, self.jdbc_driver_name],
+                opts]
+
     def is_disconnect(self, e):
         if not isinstance(e, self.dbapi.ProgrammingError):
             return False
index 6cdc6f4386e87f61fed3b2bc1ae970010adfb2f5..fddbfaabd34bd972d8dc0552c9208c0c95f7c6d3 100644 (file)
@@ -6,6 +6,15 @@ JDBC Driver
 The official MySQL JDBC driver is at
 http://dev.mysql.com/downloads/connector/j/.
 
+Character Sets
+--------------
+
+SQLAlchemy zxjdbc dialects pass unicode straight through to the
+zxjdbc/JDBC layer. To allow multiple character sets to be sent from the
+MySQL Connector/J JDBC driver, by default SQLAlchemy sets its
+``characterEncoding`` connection property to ``UTF-8``. It may be
+overriden via a ``create_engine`` URL parameter.
+
 """
 import re
 
@@ -71,7 +80,7 @@ class MySQL_jdbc(ZxJDBCConnector, MySQLDialect):
 
     def _driver_kwargs(self):
         """return kw arg dict to be sent to connect()."""
-        return dict(CHARSET=self.encoding, yearIsDateType='false')
+        return dict(characterEncoding='UTF-8', yearIsDateType='false')
 
     def _extract_error_code(self, exception):
         # e.g.: DBAPIError: (Error) Table 'test.u2' doesn't exist
index 0956d7ab65ee23cf158f880878270c0fbd996a9f..9b0761f60b63541a90e279241e49d11ba2b9d304 100644 (file)
@@ -64,13 +64,8 @@ class Oracle_jdbc(ZxJDBCConnector, OracleDialect):
         super(Oracle_jdbc, self).initialize(connection)
         self.implicit_returning = False
 
-    def create_connect_args(self, url):
-        hostname = url.host
-        port = url.port or '1521'
-        dbname = url.database
-        jdbc_url = 'jdbc:oracle:thin:@%s:%s:%s' % (hostname, port, dbname)
-        return [[jdbc_url, url.username, url.password, self.jdbc_driver_name],
-                self._driver_kwargs()]
+    def _create_jdbc_url(self, url):
+        return 'jdbc:oracle:thin:@%s:%s:%s' % (url.host, url.port or 1521, url.database)
 
     def _get_server_version_info(self, connection):
         version = re.search(r'Release ([\d\.]+)', connection.connection.dbversion).group(1)