【发布时间】:2014-11-19 14:43:48
【问题描述】:
Django 1.7、Python 3.4。
在我的模型中,我定义了几个 TextField。
当我去加载一个 JSON 固定装置(它是从 SQLite3 转储生成的)时,它在第二个对象上失败了,它的一个字段有 515 个字符。
打印的错误是
psycopg2.DataError: value too long for type character varying(500)
我创建了一个新数据库(不仅仅是一个表删除,一个全新的数据库),修改了我的 settings.py 文件,在新数据库上运行 manage.py syncdb,创建了一个用户,并尝试再次加载数据,得到同样的错误。
打开 pgAdmin3 后,所有列,包括定义的 CharField 和 TextField 都列为类型character var。
所以看起来 TextField 被忽略了,而 CharFields 正在被创建。 PostgreSQL 文档明确列出了文本和字符类型,并将文本定义为长度不受限制。知道为什么吗?
【问题讨论】:
-
你确定模型没有变,字段还是TextField?>
-
呃,为什么 ORM 坚持设置任意限制? Django 应该只使用
text或不受约束的varchar。 -
@CraigRinger 我同意 django 和其他人应该默认使用 95% 的一般用例,但我确实理解为高负载应用程序保持小而快的数据库的必要性。有趣的是,Postgres 表示在 varchar 上使用 Text 没有速度损失,但所有 varchar 都受到限制,这似乎很奇怪。除非我专门处理大量数据,否则我只会在所有 Django 应用程序中使用 TextField。
标签: python sql django postgresql psycopg2