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