DATA IMPORTS - THEY'rE NOT _THAT_ HARD *



* Depends on your data, YMMV

settings.py

import dj_database_url

DATABASES = {
    'default': dj_database_url.config(default='postgres://username@127.0.0.1:5432/new-database-name'),    'legacy': dj_database_url.config(default='mysql://username@127.0.0.1:3306/old-database-name')
}...

INSPECTDB

 > python manage.py inspectdb --database=legacy > models.py
class Articles(models.Model):
    ar_id = models.IntegerField(primary_key=True)
    ar_title = models.TextField()
    ar_summary = models.TextField(blank=True)
    ar_status = models.IntegerField()
    ...    
    class Meta:
        db_table = 'articles'


class ArticleL(models.Model):
    id = models.IntegerField(primary_key=True, db_column='ar_id')
    title = models.TextField(db_column='ar_title')
    summary = models.TextField(blank=True, db_column='ar_summary')     
    status = models.IntegerField(db_column='ar_status')    
    class Meta: 
        db_table = 'articles'


INTERACT WITH OLD DB

> from legacy_migrations.models import ArticleL
> ArticleL.objects.using('legacy').all()

Transform data

class ArticleL(models.Model):
    id = models.IntegerField(primary_key=True, db_column='ar_id')
    title = models.TextField(db_column='ar_title')
    summary = models.TextField(blank=True, db_column='ar_summary')
    _status = models.IntegerField()
    def status(self):
        if self._status == 1:
            return 'submitted'
        elif self._status == 2:
            return 'unfinished'
        elif self._status == 3:
            return 'published'
for article in ArticleL.objects.using('legacy').all():    new_article = Article.objects.create(        title=article.title,        summary=article.summary,        status=article.status()    )

BULK_CREATE()

new_articles = []

for article in ArticleL.objects.using('legacy').all():
    new_article = Article(
        title=article.title
        ...
    )
    new_articles.append(new_article)

Article.objects.bulk_create(new_articles)

LEGACY MIGRATIONS - APP STRUCTURE

|
|-- app1
|   |-- __init__.py
|   |-- views.py
|   |-- models.py
|
`-- legacy_migrations
    |-- __init__.py
    |-- models.py
    `-- management
        |-- __init__.py
        `-- commands
            |-- __init__.py
            `-- import_data.py

DATA IMPORTS

By Justin Arulnathan

DATA IMPORTS

  • 701