Ian,

> 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. 

That's not entirely true actually, I talked to Andy Dustman (MySQLdb's author 
earlier this year while researching the bits needed for porting) and he 
mentioned that several people ported it over the Python 3:

- http://sourceforge.net/projects/mysql-python/forums/forum/70460/topic/3831691
- https://github.com/davispuh/MySQL-for-Python-3

Quoting him from his private reply: "I use 1.2.3 regularly with Django, so if 
there's serious interest in a Python 3 version, I'll try to find the time and 
energy to work on it again."

As to which of those unofficial ports is the "correct" one, I can't help. But 
it would certainly be helpful to get in touch with Andy before dismissing 
MySQLdb altogether.

> 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.

I think it's better to ask whether it's appropriate to switch the backend 
library while doing the Python version jump. In my opinion it's not given the 
stability MySQLdb has shown over the years. At least I'm not seeing reasons to 
get rid of it.

> 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.

IMO it's not, database backends vary in the way to speak to the database, so if 
-- and only if it's really needed to introduce another backend for MySQL -- it 
should be independent from the current one.

> 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?

I asked Martin von Löwis who maintains the Py3K branch in Django official SVN 
repo to review Vinay's changes and merge them, as long as you manage to get 
patches in line with their work I think we're fine.

Jannis

-- 
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