Proposal: django.contrib.mysql

574 views
Skip to first unread message

Adam Johnson

unread,
Mar 3, 2016, 6:09:00 PM3/3/16
to Django developers (Contributions to Django itself)
The django.contrib.postgres docs state:

There is no fundamental reason why (for example) a contrib.mysql module does not exist

Well... over the past year and a bit I've been developing Django-MySQL. It has a ton of features specific to MySQL and/or MariaDB. For a quick tour of the features, see the exposition in the documentation: https://django-mysql.readthedocs.org/en/latest/exposition.html (it's not all suitable for Django core, some is kinda hacky (but well tested!))

At DUTH in November I talked with Josh Smeaton about posting a suggestion here for django.contrib.mysql. Since then, I've simply been lazy/forgetful, but now I'm here getting round to it.

I'm also a bit motivated by my recent completion of its JSONField for MySQL 5.7+ which is very similar to the contrib.postgres one, copying and adapting large parts of code from Marc Tamlyn's work. We all know how much everyone loves JSON these days. If anything, this could be a core field rather than a contrib one - Oracle and SQLite also have JSON capabilities now. JSON everywhere!

Anyway... what's the interest in django.contrib.mysql? And where woudl we go from here...

Tim Graham

unread,
Mar 3, 2016, 6:45:07 PM3/3/16
to Django developers (Contributions to Django itself)
Nice work, Adam. What's your main motivation for wanting to include it in Django itself? Do you think that including it will simplify the code much? Do you hope to attract new contributors by including it in Django itself? It's a bit concerning to me that the project seems like a one man show as there are only 3 other contributors with 3 commits each to your 454 commits. Do you have a long term interesting in maintaining the module as part of Django itself?

Who else would step up to provide expertise here, especially if you have to step away for whatever reason?

Aymeric Augustin

unread,
Mar 4, 2016, 2:15:15 AM3/4/16
to django-d...@googlegroups.com
Hi Adam,

django-mysql has a rather large API surface. I think the first step would be to make a list of the most stable and generally useful bits that are candidate for inclusion in Django and to write that list down in a DEP.

The fields, functions, lookups, and aggregates are good candidates. I’m less sure about the QuerySet extensions because we don’t have anything similar yet. We’d have to think about the implications.

Looking forwards, django-mysql could be an experimental ground for features. When they stabilize, the most common features could go into django.contrib.mysql.

Since making changes to public APIs is a pain, you only want to put code in Django when it’s done. To a lesser extent, we have Python’s “standard library is where modules go to die” problem.

It would obviously help if other community members expressed interest in django.contrib.mysql or, even better, intent to help maintain it in the future.

I hope this helps,

-- 
Aymeric.

PS: if this plan comes to fruition, most likely you’ll get commit access along the way ;-)


--
You received this message because you are subscribed to the Google Groups "Django developers (Contributions to Django itself)" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-develop...@googlegroups.com.
To post to this group, send email to django-d...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-developers.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-developers/ed9245ea-f908-4c1c-91ad-cb94f0147959%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Josh Smeaton

unread,
Mar 4, 2016, 4:04:19 AM3/4/16
to Django developers (Contributions to Django itself)
I agree regarding choosing the most most useful bits. When we discussed this at DUTH I did mention that there were some features that would be very difficult to get included in Django. I guess you'd have to consider whether or not you'd be willing to move features from django-mysql into contrib and how that might affect django-mysql in the longer term.  I really like the idea of having a contrib.mysql though, as it shows we're not just committed to moving postgres forward. Having a voice for mysql in the team would also be very helpful.

Cheers

Marc Tamlyn

unread,
Mar 4, 2016, 4:15:02 AM3/4/16
to django-d...@googlegroups.com
One of the other reasons why contrib.postgres is in core is that it required some changes to internals of the ORM. It's possible that all of those we need are done now (except custom indexes) - is there anything about contrib.mysql which would benefit from this?

I'm happy for JSONField to be made a core field on the condition that it's underlying support is more than a text blob on all our main databases. It sounds like this will soon be the case.

Marc

Adam Johnson

unread,
Mar 15, 2016, 7:13:05 AM3/15/16
to Django developers (Contributions to Django itself)
Wow I didn't reply for 11 days (sorry, company a bit crazy right now) and features are already being stolen merged! https://github.com/django/django/pull/6292/files :)
 
What's your main motivation for wanting to include it in Django itself? 

I want Django to work better on MySQL/MariaDB
 
Do you have a long term interesting in maintaining the module as part of Django itself?

I've worked with Django on MySQL for 3 years and don't see that ending any time soon.
 
we have Python’s “standard library is where modules go to die” problem

I'm aware of this, and as you suggest Aymeric, we could just merge the most stable bits. I was thinking anything that's similar to what contrib.postgres supplies is a good idea for inclusion - the fields, lookups, and aggregates are good ideas. Of the fields I think only the JSONField and maybe EnumField are worth it.

Also the migration operations for loading plugins might be useful, although they're mostly only useful on MariaDB.

For writing a DEP - I just make a PR to https://github.com/django/deps right?

I'm happy for JSONField to be made a core field on the condition that it's underlying support is more than a text blob on all our main databases. It sounds like this will soon be the case.

 Just a warning - I think this would be a very complex field, with lots of internal connection vendor switching. All the DB vendors have done it their own way, more or less :( 

Sérgio Basto

unread,
May 4, 2017, 12:43:12 AM5/4/17
to Django developers (Contributions to Django itself)

IMHO Python Django  should support MySQL 5.7.x JSON fields , quickly .

Thanks


johannes mtwengi

unread,
May 4, 2017, 3:15:10 PM5/4/17
to Django developers (Contributions to Django itself)
i would like to be part and start foundations coding giving back

Adam Johnson

unread,
May 8, 2017, 11:22:04 AM5/8/17
to django-d...@googlegroups.com
Update: I decided not to try merge django-mysql as django.contrib.mysql because I think it's an advantage to have it as a separate package. As it stands, it supports Django 1.8 to 1.11 for all features, so people who aren't on cutting edge Django can still use all its features. Contrast that with django.contrib.postgres, where new features are only available on new Django versions, with their fixed release cycle.

Sérgio, django-mysql already fully supports MySQL 5.7's JSON type with its JSONFieldhttps://django-mysql.readthedocs.io/en/latest/model_fields/json_field.html . Try that.

--
You received this message because you are subscribed to a topic in the Google Groups "Django developers (Contributions to Django itself)" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/django-developers/sAgYOqBUvgI/unsubscribe.
To unsubscribe from this group and all its topics, send an email to django-developers+unsubscribe@googlegroups.com.
To post to this group, send email to django-developers@googlegroups.com.

For more options, visit https://groups.google.com/d/optout.



--
Adam

Conor McGee

unread,
May 9, 2017, 7:09:24 AM5/9/17
to Django developers (Contributions to Django itself)
By the way, just wanted to say thanks for all the hard work on django-mysql - it's a great package.


On Monday, 8 May 2017 16:22:04 UTC+1, Adam Johnson wrote:
Update: I decided not to try merge django-mysql as django.contrib.mysql because I think it's an advantage to have it as a separate package. As it stands, it supports Django 1.8 to 1.11 for all features, so people who aren't on cutting edge Django can still use all its features. Contrast that with django.contrib.postgres, where new features are only available on new Django versions, with their fixed release cycle.

Sérgio, django-mysql already fully supports MySQL 5.7's JSON type with its JSONFieldhttps://django-mysql.readthedocs.io/en/latest/model_fields/json_field.html . Try that.
On 4 May 2017 at 18:41, johannes mtwengi <johanne...@gmail.com> wrote:
i would like to be part and start foundations coding giving back

On Friday, March 4, 2016 at 1:09:00 AM UTC+2, Adam Johnson wrote:
The django.contrib.postgres docs state:

There is no fundamental reason why (for example) a contrib.mysql module does not exist

Well... over the past year and a bit I've been developing Django-MySQL. It has a ton of features specific to MySQL and/or MariaDB. For a quick tour of the features, see the exposition in the documentation: https://django-mysql.readthedocs.org/en/latest/exposition.html (it's not all suitable for Django core, some is kinda hacky (but well tested!))

At DUTH in November I talked with Josh Smeaton about posting a suggestion here for django.contrib.mysql. Since then, I've simply been lazy/forgetful, but now I'm here getting round to it.

I'm also a bit motivated by my recent completion of its JSONField for MySQL 5.7+ which is very similar to the contrib.postgres one, copying and adapting large parts of code from Marc Tamlyn's work. We all know how much everyone loves JSON these days. If anything, this could be a core field rather than a contrib one - Oracle and SQLite also have JSON capabilities now. JSON everywhere!

Anyway... what's the interest in django.contrib.mysql? And where woudl we go from here...

--
You received this message because you are subscribed to a topic in the Google Groups "Django developers (Contributions to Django itself)" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/django-developers/sAgYOqBUvgI/unsubscribe.
To unsubscribe from this group and all its topics, send an email to django-develop...@googlegroups.com.
To post to this group, send email to django-d...@googlegroups.com.



--
Adam

Asif Saifuddin

unread,
May 10, 2017, 1:48:05 AM5/10/17
to Django developers (Contributions to Django itself)
Hi Adam,

How about making the package official extension and bring under django org?

Thanks,

Asif


On Monday, May 8, 2017 at 9:22:04 PM UTC+6, Adam Johnson wrote:
Update: I decided not to try merge django-mysql as django.contrib.mysql because I think it's an advantage to have it as a separate package. As it stands, it supports Django 1.8 to 1.11 for all features, so people who aren't on cutting edge Django can still use all its features. Contrast that with django.contrib.postgres, where new features are only available on new Django versions, with their fixed release cycle.

Sérgio, django-mysql already fully supports MySQL 5.7's JSON type with its JSONFieldhttps://django-mysql.readthedocs.io/en/latest/model_fields/json_field.html . Try that.
On 4 May 2017 at 18:41, johannes mtwengi <johanne...@gmail.com> wrote:
i would like to be part and start foundations coding giving back

On Friday, March 4, 2016 at 1:09:00 AM UTC+2, Adam Johnson wrote:
The django.contrib.postgres docs state:

There is no fundamental reason why (for example) a contrib.mysql module does not exist

Well... over the past year and a bit I've been developing Django-MySQL. It has a ton of features specific to MySQL and/or MariaDB. For a quick tour of the features, see the exposition in the documentation: https://django-mysql.readthedocs.org/en/latest/exposition.html (it's not all suitable for Django core, some is kinda hacky (but well tested!))

At DUTH in November I talked with Josh Smeaton about posting a suggestion here for django.contrib.mysql. Since then, I've simply been lazy/forgetful, but now I'm here getting round to it.

I'm also a bit motivated by my recent completion of its JSONField for MySQL 5.7+ which is very similar to the contrib.postgres one, copying and adapting large parts of code from Marc Tamlyn's work. We all know how much everyone loves JSON these days. If anything, this could be a core field rather than a contrib one - Oracle and SQLite also have JSON capabilities now. JSON everywhere!

Anyway... what's the interest in django.contrib.mysql? And where woudl we go from here...

--
You received this message because you are subscribed to a topic in the Google Groups "Django developers (Contributions to Django itself)" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/django-developers/sAgYOqBUvgI/unsubscribe.
To unsubscribe from this group and all its topics, send an email to django-develop...@googlegroups.com.
To post to this group, send email to django-d...@googlegroups.com.



--
Adam

Sérgio Basto

unread,
May 10, 2017, 8:43:26 AM5/10/17
to Django developers (Contributions to Django itself)


On Monday, May 8, 2017 at 4:22:04 PM UTC+1, Adam Johnson wrote:
Sérgio, django-mysql already fully supports MySQL 5.7's JSON type with its JSONFieldhttps://django-mysql.readthedocs.io/en/latest/model_fields/json_field.html . Try that.

yes , I'm using it now and works great, many thanks .

BTW the serialize issue that I had (I don't know if I already mention here) is fixed in

Fix JSONField to work with Django's serializer framework commit in https://github.com/adamchainz/django-mysql/compare/v1.1.1...master
i.e is not yet released , maybe should be ...

Thanks
 

Adam Johnson

unread,
May 10, 2017, 1:04:15 PM5/10/17
to django-d...@googlegroups.com
How about making the package official extension and bring under django org?

I thought about this, but a few parts of Django-MySQL are incredibly hacky and should probably not be "officially supported code".

--
You received this message because you are subscribed to a topic in the Google Groups "Django developers (Contributions to Django itself)" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/django-developers/sAgYOqBUvgI/unsubscribe.
To unsubscribe from this group and all its topics, send an email to django-developers+unsubscribe@googlegroups.com.
To post to this group, send email to django-developers@googlegroups.com.
Visit this group at https://groups.google.com/group/django-developers.

For more options, visit https://groups.google.com/d/optout.



--
Adam
Reply all
Reply to author
Forward
0 new messages