]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
MySQL-connector dialect now allows options in the create_engine
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 13 Oct 2013 18:09:35 +0000 (14:09 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 13 Oct 2013 18:09:53 +0000 (14:09 -0400)
query string to override those defaults set up in the connect,
including "buffered" and "raise_on_warnings".
[ticket:2515]

doc/build/changelog/changelog_08.rst
lib/sqlalchemy/dialects/mysql/mysqlconnector.py
test/dialect/mysql/test_dialect.py

index 134a683493dd20676ee459f67c90d0b37024b05f..a126bcbeb2c777ad9ace2fad36db864e8a6023bd 100644 (file)
 .. changelog::
     :version: 0.8.3
 
+    .. change::
+        :tags: bug, mysql
+        :tickets: 2515
+        :versions: 0.9.0
+
+        MySQL-connector dialect now allows options in the create_engine
+        query string to override those defaults set up in the connect,
+        including "buffered" and "raise_on_warnings".
+
     .. change::
         :tags: bug, postgresql
         :tickets: 2742
index b1906d3b98311576b3d5d5d6c854210e78218588..18d4262c99810e1fced287122ab7b443b42f4df4 100644 (file)
@@ -79,12 +79,13 @@ class MySQLDialect_mysqlconnector(MySQLDialect):
 
     def create_connect_args(self, url):
         opts = url.translate_connect_args(username='user')
+
         opts.update(url.query)
 
         util.coerce_kw_type(opts, 'buffered', bool)
         util.coerce_kw_type(opts, 'raise_on_warnings', bool)
-        opts['buffered'] = True
-        opts['raise_on_warnings'] = True
+        opts.setdefault('buffered', True)
+        opts.setdefault('raise_on_warnings', True)
 
         # FOUND_ROWS must be set in ClientFlag to enable
         # supports_sane_rowcount.
index 62bdfc81bbdf32dec917d7528d48e940b50997ff..2ff17f0f7340010f73b781e657407029dd4408a5 100644 (file)
@@ -9,12 +9,17 @@ from sqlalchemy.testing import engines
 import datetime
 
 class DialectTest(fixtures.TestBase):
-    __only_on__ = 'mysql'
+    def test_ssl_arguments_mysqldb(self):
+        from sqlalchemy.dialects.mysql import mysqldb
+        dialect = mysqldb.dialect()
+        self._test_ssl_arguments(dialect)
 
-    @testing.only_on(['mysql+mysqldb', 'mysql+oursql'],
-                    'requires particular SSL arguments')
-    def test_ssl_arguments(self):
-        dialect = testing.db.dialect
+    def test_ssl_arguments_oursql(self):
+        from sqlalchemy.dialects.mysql import oursql
+        dialect = oursql.dialect()
+        self._test_ssl_arguments(dialect)
+
+    def _test_ssl_arguments(self, dialect):
         kwarg = dialect.create_connect_args(
             make_url("mysql://scott:tiger@localhost:3306/test"
                 "?ssl_ca=/ca.pem&ssl_cert=/cert.pem&ssl_key=/key.pem")
@@ -33,6 +38,50 @@ class DialectTest(fixtures.TestBase):
             }
         )
 
+    def test_mysqlconnector_buffered_arg(self):
+        from sqlalchemy.dialects.mysql import mysqlconnector
+        dialect = mysqlconnector.dialect()
+        kw = dialect.create_connect_args(
+                make_url("mysql+mysqlconnector://u:p@host/db?buffered=true")
+            )[1]
+        eq_(kw['buffered'], True)
+
+        kw = dialect.create_connect_args(
+                make_url("mysql+mysqlconnector://u:p@host/db?buffered=false")
+            )[1]
+        eq_(kw['buffered'], False)
+
+        kw = dialect.create_connect_args(
+                make_url("mysql+mysqlconnector://u:p@host/db")
+            )[1]
+        eq_(kw['buffered'], True)
+
+    def test_mysqlconnector_raise_on_warnings_arg(self):
+        from sqlalchemy.dialects.mysql import mysqlconnector
+        dialect = mysqlconnector.dialect()
+        kw = dialect.create_connect_args(
+                make_url("mysql+mysqlconnector://u:p@host/db?raise_on_warnings=true")
+            )[1]
+        eq_(kw['raise_on_warnings'], True)
+
+        kw = dialect.create_connect_args(
+                make_url("mysql+mysqlconnector://u:p@host/db?raise_on_warnings=false")
+            )[1]
+        eq_(kw['raise_on_warnings'], False)
+
+        kw = dialect.create_connect_args(
+                make_url("mysql+mysqlconnector://u:p@host/db")
+            )[1]
+        eq_(kw['raise_on_warnings'], True)
+
+    @testing.only_on('mysql')
+    def test_random_arg(self):
+        dialect = testing.db.dialect
+        kw = dialect.create_connect_args(
+                make_url("mysql://u:p@host/db?foo=true")
+            )[1]
+        eq_(kw['foo'], "true")
+
 class SQLModeDetectionTest(fixtures.TestBase):
     __only_on__ = 'mysql'