https://github.com/keredson/deseb
Django External Schema Evolution Branch
https://github.com/keredson/deseb
Last synced: about 2 months ago
JSON representation
Django External Schema Evolution Branch
- Host: GitHub
- URL: https://github.com/keredson/deseb
- Owner: keredson
- Created: 2013-10-16T22:33:27.000Z (over 12 years ago)
- Default Branch: master
- Last Pushed: 2014-06-26T14:56:54.000Z (about 12 years ago)
- Last Synced: 2025-01-28T05:41:37.130Z (over 1 year ago)
- Language: Python
- Size: 305 KB
- Stars: 0
- Watchers: 3
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
Django External Schema Evolution Branch
=======================================
This project allows you to make Django model changes without having to
drop and re-add tables. This project started as a Google Summer
of Code project in 2006.
Quick Start
===========
To start using deseb, add the `import deseb` line after you set `DJANGO_SETTINGS_MODULE`
in your `manage.py`. Like this:
```python
#!/usr/bin/env python
import os
import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
import deseb # <-- ADD THIS LINE
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
```
How it Works
============
Let's say I have the following model:
```python
class Review(models.Model):
when = models.DateTimeField(default=datetime.datetime.now)
text = models.TextField(blank=True, null=True)
rating = models.IntegerField(default=0)
appt = models.ForeignKey(Appointment)
user = models.ForeignKey(User)
uuid = UUIDField(version=4)
```
And I want to add a new column `response`:
```python
class Review(models.Model):
when = models.DateTimeField(default=datetime.datetime.now)
text = models.TextField(blank=True, null=True)
response = models.TextField(blank=True, null=True)
rating = models.IntegerField(default=0)
appt = models.ForeignKey(Appointment)
user = models.ForeignKey(User)
uuid = UUIDField(version=4)
```
If I run `./manage.py evolvedb`, I'll see:
```sql
$ ./manage.py evolvedb
appthub: the following schema upgrade is available:
ALTER TABLE `appthub_review` ADD COLUMN `response` longtext;
do you want to run the preceeding commands?
type 'yes' to continue, or 'no' to cancel: yes
schema upgrade executed
```
Now suppose I changed my mind on what that column should be called - it should be `response_text`:
```python
class Review(models.Model):
when = models.DateTimeField(default=datetime.datetime.now)
text = models.TextField(blank=True, null=True)
response_text = models.TextField(blank=True, null=True, aka='response')
rating = models.IntegerField(default=0)
appt = models.ForeignKey(Appointment)
user = models.ForeignKey(User)
uuid = UUIDField(version=4)
```
Now I run `./manage.py evolvedb` again:
```sql
$ ./manage.py evolvedb
appthub: the following schema upgrade is available:
ALTER TABLE `appthub_review` CHANGE COLUMN `response` `response_text` longtext NULL;
do you want to run the preceeding commands?
type 'yes' to continue, or 'no' to cancel: yes
schema upgrade executed
```
Now supposed I thought this was a bad idea to begin with, so I change my model back to its original form:
```python
class Review(models.Model):
when = models.DateTimeField(default=datetime.datetime.now)
text = models.TextField(blank=True, null=True)
rating = models.IntegerField(default=0)
appt = models.ForeignKey(Appointment)
user = models.ForeignKey(User)
uuid = UUIDField(version=4)
```
Now run `./manage.py evolvedb` again:
```sql
$ ./manage.py evolvedb
appthub: the following schema upgrade is available:
-- warning: the following may cause data loss
ALTER TABLE `appthub_review` DROP COLUMN `response_text`;
-- end warning
do you want to run the preceeding commands?
type 'yes' to continue, or 'no' to cancel: yes
schema upgrade executed
```