From models.py: class emailusername(models.Model): """ Store each username just once along with an integer ID which is automatically created by the ORM. """ username = models.CharField(max_length=64); class emaildomain(models.Model): """ Store each domain just once along with an integer ID which is automatically created by the ORM. """ domain = models.CharField(max_length=64); class emailaddress(models.Model): """ Store each email address as a combination of integer@integer foreign key relationships to the emailusername and emaildomain classes. Django automatically links the integer ID columns for us. This is much more space efficient and faster for lookup than storing each individual email address as a string. """ username = models.ForeignKey('emailusername') domain = models.ForeignKey('emaildomain') from parsemail.py which imports models from models.py: (userto,domainto) = parseaddr(mail['To'])[1].split('@') newemailaddress = emailaddress() newemailusername = emailusername() newemaildomain = emaildomain() newemailusername.username = userto newemaildomain.domain = domainto newemaildomain.save() newemailusername.save() newemailaddress.username = newemailusername newemaildomain.domain = newemaildomain newemailaddress.save() Traceback (most recent call last): File "./parsemail.py", line 189, in ? process_mail(raw) File "./parsemail.py", line 166, in process_mail parsemail(mail).save() File "./parsemail.py", line 88, in parsemail newemailaddress.save() File "/usr/lib/python2.4/site-packages/django/db/models/base.py", line 410, in save self.save_base(force_insert=force_insert, force_update=force_update) File "/usr/lib/python2.4/site-packages/django/db/models/base.py", line 495, in save_base result = manager._insert(values, return_id=update_pk) File "/usr/lib/python2.4/site-packages/django/db/models/manager.py", line 177, in _insert return insert_query(self.model, values, **kwargs) File "/usr/lib/python2.4/site-packages/django/db/models/query.py", line 1087, in insert_query return query.execute_sql(return_id) File "/usr/lib/python2.4/site-packages/django/db/models/sql/subqueries.py", line 320, in execute_sql cursor = super(InsertQuery, self).execute_sql(None) File "/usr/lib/python2.4/site-packages/django/db/models/sql/query.py", line 2369, in execute_sql cursor.execute(sql, params) File "/usr/lib/python2.4/site-packages/django/db/backends/mysql/base.py", line 89, in execute raise Database.IntegrityError(tuple(e)) _mysql_exceptions.IntegrityError: (1048, "Column 'domain_id' cannot be null")