Ton*_*ony 6 python mysql django
我在Django中有一个非常基本的模型:
class Case(models.Model):
name = models.CharField(max_length=255)
created_at = models.DateTimeField(default=datetime.now)
updated_at = models.DateTimeField(default=datetime.now)
def save(self):
if self.created_at == None:
self.created_at = datetime.now()
self.updated_at = datetime.now()
super(Case, self).save()
class Meta:
db_table = u'cases'
Run Code Online (Sandbox Code Playgroud)
因为我没有指定PK,Django为我照顾了这个.我在我的数据库中看到了一个名为"id"的字段,标记为主键并自动增加.我觉得奇怪的是得到了警告,因为数据库和模型端的一切都很酷.错误是:
_mysql_exceptions.Warning
Warning: Field 'id' doesn't have a default value
Run Code Online (Sandbox Code Playgroud)
保存时我的工作是将id设置为0.它会终止警告并且无论如何都会正确设置id,因为MySQL处理它.
case = Case()
case.id = 0 #ugly workaround for - Warning: Field 'id' doesn't have a default value
case.name = request.POST[u'case[name]']
case.save()
Run Code Online (Sandbox Code Playgroud)
此解决方案的问题是:
有谁知道如何解决这一问题?
我在跑:
Python 2.7.2
django.VERSION (1, 3, 1, 'final', 0)
mysql Ver 14.14 Distrib 5.1.45, for apple-darwin10.2.0 (i386) using readline 5.1
MySQL_python-1.2.3-py2.7-macosx-10.4-x86_64.egg
Run Code Online (Sandbox Code Playgroud)
我的create table看起来像这样:
CREATE TABLE `cases` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=45 DEFAULT CHARSET=latin1
Run Code Online (Sandbox Code Playgroud)
Aea*_*Aea 13
我想在本周讨论这个问题时扩展这个问题.我得到了同样的错误,看看模型定义和SQL定义表明:
受影响的模型要么没有明确定义的PK,要么明确定义了PK(两者都有问题).仅此一点似乎无关紧要.
受影响的表具有OP中的"id"定义,即id int(11) NOT NULL AUTO_INCREMENT.该PRIMARY KEY预期设定.
查看MySQL查询日志,我得到了这样的程度:
INSERT INTO `x` (...) VALUES (...)
SHOW WARNINGS
ROLLBACK
Run Code Online (Sandbox Code Playgroud)
单独运行查询是成功的,并SHOW WARNINGS反映了OP中记录的警告.
然而,我遇到了一个MySQL端修复,http://webit.ca/2012/01/field-id-doesnt-have-a-default-value/提到重置id定义(粗略地看一下没有任何不同)修复问题.我无法解释为什么这样可行,但它解决了这个问题而没有任何额外的代码更改.我相信这可能在某种程度上与删除记录有关,但整个问题对我来说似乎并不敏感.
| 归档时间: |
|
| 查看次数: |
9575 次 |
| 最近记录: |