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")