All pastes #2085975 Raw Edit

Untitled

public text v1 · immutable
#2085975 ·published 2011-09-30 23:59 UTC
rendered paste body
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")