2013-05-09 125 views
1

我使用MySQL作为数据库做一个Django项目,我得从另一个数据库中的一些数据来填充我的Django的数据库表中的某些字段外键约束失败

我的学生的Django模型是这样的:

class Student(models.Model): 
    #user = models.OneToOneField(User) 
    email = models.EmailField(blank=True, null=True) 
    email_verified = models.BooleanField(blank=True) 
    mobile = models.CharField(max_length=11, unique=True, blank=True, null=True) 
    mobile_verified = models.BooleanField(blank=True) 

    nickname = models.CharField(max_length=20, blank=True, null=True) 
    gender = models.PositiveSmallIntegerField(choices=GENDER_CHOICES, 
               null=True, blank=True) 
    level = models.PositiveSmallIntegerField(choices=STUDENT_LEVELS_CHOICES, 
              null=True, blank=True) 

    source = models.PositiveSmallIntegerField(choices=SOURCE_SITE, blank=True, null=True) 
    register_at = models.DateTimeField(blank=True, null=True) 
    enroll_at = models.DateTimeField(blank=True, null=True) 

    state = models.PositiveSmallIntegerField(choices=STUDENT_MAINTAIN_STATE, blank=True, null=True) 
    is_company_user = models.BooleanField(blank=True) 
    company_name = models.CharField(max_length=40, blank=True, null=True) 
    importance = models.PositiveSmallIntegerField(choices=IMPORTANCE_STATE, blank=True, null=True) 
    feature = models.PositiveSmallIntegerField(choices=USER_FEATURE, blank=True, null=True) 
    description = models.CharField(max_length=1000, blank=True, null=True) 

    sales = models.ForeignKey(User) 
    remaining = models.IntegerField(blank=True, null=True)#订单余额 
    last_state_change_time = models.DateTimeField(blank=True, null=True) 

    is_delete = models.BooleanField(blank=True, default=False) 

    objects = StudentManager() 

    def __unicode__(self): 
     return self.nickname 

我写了一个PY脚本从另一个数据库传输数据,脚本是:

import MySQLdb 

try: 
    conn = MySQLdb.connect(host='localhost', user='root', passwd='', db='a') 
    cur = conn.cursor() 
    cur.execute('select * from student;') 
    res = cur.fetchall() 
    cur.close() 
    conn.close() 


    conn = MySQLdb.connect(host='localhost', user='root', passwd='', db='b') 
    cur = conn.cursor() 
    for item in res: 
     if item: 
      cur.execute('insert into student_student (email, email_verified, mobile, mobile_verified, nickname, gender, level, register_at) values (%s, %s, %s, %s, %s, %s, %s, %s);', (item[3], item[4], item[1], item[2], item[7], item[8], item[6], item[14])) 


    conn.commit() 
    cur.close() 
    conn.close() 



except MySQLdb.Error, e: 
    print "Mysql Error %d: %s" % (e.args[0], e.args[1]) 

我的目标是从“A”到“b”读取数据,而有些领域的b可能是n (因为a只有几个字段适合b)。当我运行我的脚本,我得到了以下错误:

MySQL错误1452:不能添加或更新子行,外键约束失败(crm.student_student,约束sales_id_refs_id_6e3649f6外键(sales_id)参考AUTH_USER(ID ))

如何解决这个问题?

我将存储引擎改为innodb,但它不起作用,请不要向下投我的问题,我真的需要你的帮助。

+1

您不会问人们不要downvote您的问题。不低调的方法是提出高质量的问题。 – 2013-05-09 10:01:48

+0

谢谢你的评论,我是网络开发的新手,我尽我所能让我的问题清楚,我也希望人们不要在不告诉我原因的情况下低估我的问题,我不会做出同样的错误两次。 – 2013-05-09 10:11:27

回答

1

sales = models.ForeignKey(User)字段不为空,但在插入时,您没有为student_student.sales_id提供任何值。要么提供sales_id或将blank=Truenull=True添加到该字段

+0

非常感谢你:) – 2013-05-09 10:29:53