The django has already provided the way to use SQL, I don't think this is 
needed.

----- Original Message ----- 
From: "Noam" <[EMAIL PROTECTED]>
To: "Django users" <django-users@googlegroups.com>
Sent: Thursday, July 05, 2007 2:40 AM
Subject: An idea on DB migration


> 
> 
> Hello,
> 
> I have an idea on how DB migration can work in Django. It's very
> simple, it will allow the programmer to do anything he wants in the
> migration, and he will have to learn almost nothing in order to
> migrate the DB. The drawback is that it's not very efficient, which
> means that it will probably work only for small to medium databases -
> but I think that most Django sites are like this. If you have a bigger
> site, you will have to use SQL.
> 
> My idea is this: create a tool which will create a script which will
> migrate the DB. The user will then edit the script as he likes, and
> run it to create a new DB with the migrated data. If the result is not
> what he wanted, he will edit the script again and run it again.
> 
> For example, say that I have a directory with the old site (and old
> models) and a directory with the new site. The only difference between
> them is that I renamed the field store.Book.name to
> store.Book.book_name. I will run "django-admin.py migrate oldsitedir
> newsitedir". This will create a file which will look like this:
> 
> =============================
> #!/usr/bin/env python
> 
> from django.db import ...
> 
> class old_settings:
>    DATABASE_ENGINE = 'mysql'
>    DATABASE_NAME = 'store_3'
>    ...
> 
> class new_settings:
>    DATABASE_ENGINE = 'mysql'
>    DATABASE_NAME = 'store_4'
>    ...
> 
> old_connection = make_connection_from_settings(old_settings)
> new_connection = make_connection_from_settings(new_settings)
> 
> # Old models
> 
> class old:
>    class auth:
>        class User(models.Model):
>            _connection = old_connection  # or whatever will be needed
> 
>            username = models.CharField(unique=True, maxlength=30)
>            ...
> 
>    class store:
>        class Book(models.Model):
>            _connection = old_connection
> 
>            name = models.CharField()
>    ...
> 
> # New models
> 
> class new:
>    ...
>    class store:
>        class Book(models.Model):
>            _connection = old_connection
> 
>            book_name = models.CharField()
>    ...
> 
> # Migration function
> 
> def migrate():
>    drop_tables_in_new_db_and_sync_it()
> 
>    # Migrate auth.User
>    for o in old.auth.User.objects.all():
>        n = new.auth.User()
>        n.id = o.id
>        n.username = o.username
>        ...
>        n.save()
> 
>    # Migrate store.Book
>    for o in old.store.Book.objects.all():
>        n = new.store.Book()
>        n.id = o.id
>        # TODO:
>        # Removed fields: name
>        # Added fields: book_name
>        n.save()
>    ...
> 
> if __name__ == '__main__':
>    migrate()
> 
> =============================
> 
> Then, to migrate the DB, I will edit the file, search for "TODO"
> comments, and replace the comment in the file with "n.book_name =
> o.name". I will create a new empty DB with the name "store_4".
> 
> Then I will run "./migrate.py", and the database will be migrated. I
> will run the new version of my site, and if everything works I can
> delete the DB "store_3".
> 
> Another thing: the migrate command will work also with only one given
> site directory. In that case the old db definition and the new db
> definition will be identical, and the user will be able to edit them
> manually in the generated file. This feature will also help in
> migrating between different types of databases - in that case, the
> user will only change the settings on the top of migrate.py.
> 
> To summarize: the programmer won't have to learn commands which add
> new fields, delete fields, rename fields, modify fields, etc. The
> programmer will just have to slightly modify a generated file, to
> create the new version of the DB as he likes.
> 
> I hope I managed to explain my idea. What do you think about it?
> 
> Have a good day,
> Noam
> 
> 
> > 
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to