Hi, all ---

This is a proposal to add support in Django for PyMySQL[1] as an optional
replacement for MySQLdb.

I've been working with Vinay Sajip's Python 3-compatible branch; trying to
get MySQL support working, and I have had a great deal of success, using
PyMySQL as a back end, rather than MySQLdb.

MySQLdb does not support Python3, and I haven't seen any indication online
that it will be supporting Python3 any time soon.

PyMySQL is a pure python implementation of PEP 249 for MySQL, and supports
Python 2.4 - 3.2, and MySQL 4.1 and higher. It is nearly a
plug-in-replacement for MySQLdb  (although there are a few compatibility
issues that I have tried to take care of in Django backend code)

My approach so far has been to patch django/db/backends/mysql:
   - Try to import MySQLdb, and then MySQLdb.converters and
MySQLdb.constants.
   - If that fails, try to import pymysql, and pymysql.converters and
pymysql.constants
   - Whichever succeeds, set a module-level variable 'backend' to indicate
the backend that we are using.

   - Patch the data-type conversions appropriately, depending on the
backend that was used.

So far, that's it -- and I'm down to just a couple of unit test failures,
but those may even be Python3 issues; I haven't tracked them all down yet.

My questions, then:

1. Is PyMySQL appropriate for django-core, in the opinion of the core devs?
There isn't another stable Python 3-compatible mysql adapter, as far as I
know, and I don't think Django could move to Python 3 support without at
least the currently-supported databases.

2. Is this the right approach? I know that in the past, we have had
multiple backends for PostgreSQL, in different modules under
django.db.backends, but in this case, the modules are almost 100%
compatible, except for the module names themselves, and the calling
conventions for the data conversions. It feels more like the situation with
JSON libraries, where we just load whichever one is available, and present
the same outward api to the developer.

3. Code speaks, I know -- what's the best way to share this? I've sent
Vinay a patch, but that's for his Py3k branch, and might not get the
audience that something like this needs. I'm doing it for Py3k support, but
ideally it would work just as well under Python 2.x. Should I set up a
public repository somewhere, or just open a ticket and attach patches?

Thoughts? Flames?

Regards,
Ian Clelland
<clell...@gmail.com>


[1] Original at https://github.com/petehunt/PyMySQL, my patches for better
Python 3 support at https://github.com/clelland/PyMySQL

-- 
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To post to this group, send email to django-developers@googlegroups.com.
To unsubscribe from this group, send email to 
django-developers+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-developers?hl=en.

Reply via email to