Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL上的奇数整数错误:#1452_Mysql_Django_Django Models - Fatal编程技术网

MySQL上的奇数整数错误:#1452

MySQL上的奇数整数错误:#1452,mysql,django,django-models,Mysql,Django,Django Models,这有点奇怪,但我会尽力解释。我有两个模型:一个代表电子邮件(message),另一个代表销售线索(AffiliateLead)。当通过网站提交表单时,系统会生成潜在客户,然后发送电子邮件。消息模型有一个返回到Lead的可选FK。从消息模型文件: lead = models.ForeignKey('tracking.AffiliateLead', blank=True, null=True) 现在,这个基本shell可以工作了: from tracking.models import Affil

这有点奇怪,但我会尽力解释。我有两个模型:一个代表电子邮件(message),另一个代表销售线索(AffiliateLead)。当通过网站提交表单时,系统会生成潜在客户,然后发送电子邮件。消息模型有一个返回到Lead的可选FK。从消息模型文件:

lead = models.ForeignKey('tracking.AffiliateLead', blank=True, null=True)
现在,这个基本shell可以工作了:

from tracking.models import Affiliate, AffiliateLead
from messages.models import Message
from django.contrib.auth.models import User

u = User.objects.get(username='testguy')
a = Affiliate.objects.get(affiliate_id = 'ACD023')
l = AffiliateLead(affiliate = a)
l.save()
m = Message(recipient=u, sender=u, subject='s', body='a', lead=l)
m.save()
但是,表单视图本身并没有。当我试图保存指向AffiliateLead的消息时,它抛出IntegrityError:

(1452, 'Cannot add or update a child row: a foreign key constraint fails (`app`.`messages_message`, CONSTRAINT `lead_id_refs_id_6bc546751c1f96` FOREIGN KEY (`lead_id`) REFERENCES `tracking_affiliatelead` (`id`))')
这是尽管事实,该视图只是采取形式,创建并保存AffiliateLead,然后创建并(尝试)保存消息。事实上,当抛出这个错误时,我可以进入MySQL并查看新创建的lead。当我在保存之前立即从数据库中重新检索lead时,它甚至会在视图中抛出此错误:

af_lead = AffiliateLead.objects.get(id = af_lead.id)
msg.lead = af_lead
msg.save()

最后,如果我立即刷新(重新提交表单),它就会工作。没有完整性错误。如果我让Django打印出它正在执行的SQL,我确实可以看到它在尝试插入消息之前插入了AffiliateLead,并且消息插入使用的是正确的AffiliateLead ID。我现在真的很困惑。我甚至尝试过手动事务处理,但都没有用。

我不太清楚为什么会发生这种情况,但我似乎找到了解决办法。我使用South来管理DB;它创建了InnoDB消息和MyISAM的AffiliateLead消息。将AffiliateLead表更改为InnoDB结束了IntegrityErrors。希望这对其他人有帮助。

谢谢,这很有帮助。这正是我所看到的。最近升级了我的电脑,我猜mysql现在默认为InnoDB,以前是MyISAM,所以这是非常令人惊讶的行为。我也有同样的问题。但是,在MySQL 5.5中,默认的表类型是InnoDB。我的整个网站是用5.1构建的(在我的机器上运行syncdb和loaddata之前,我刚刚升级到5.5)。因此,我收到了相同的错误消息(#1452)。解决方案是在运行sync DB之前,将设置选项中的DB Type更改为MyISAM。以下是方法: