Django mysql在保存对象时收到警告

时间:2012-02-29 07:16:13

标签: mysql django

我正在编写一个小应用程序,使用Django在我的mysql数据库中存储单词。我从文本文件中读取数据,该文件组织得非常好,如下所示: 文本文件是这样的:

DELUGE
DELUSION
DELVE
DEMAGOGUE
DEMANDING
DEMOLITION
DEMONSTRATE
DEMORALIZE
DEMOTIC
DEMUR
DENIGRATE
DENOUEMENT
DENOUNCE
DENT
DENUDE
DEPLETE
DEPLORE
DEPLOY

然后我用open('thefile')读取它的日期。这样的readlines:

 for line in open('/home/jacos/sorted-gre.txt').readlines():
...     if line:
...         p = Word(word_spelling = line)
...         p.save()

word_spelling字段是主键。 然后是这个警告: 回溯(最近一次调用最后一次):

  File "<console>", line 4, in <module>
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py", line 460, in save
    self.save_base(using=using, force_insert=force_insert, force_update=force_update)
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py", line 553, in save_base
    result = manager._insert(values, return_id=update_pk, using=using)
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/manager.py", line 195, in _insert
    return insert_query(self.model, values, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 1436, in insert_query
    return query.get_compiler(using=using).execute_sql(return_id)
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/sql/compiler.py", line 791, in execute_sql
    cursor = super(SQLInsertCompiler, self).execute_sql(None)
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/sql/compiler.py", line 735, in execute_sql
    cursor.execute(sql, params)
  File "/usr/local/lib/python2.7/dist-packages/django/db/backends/util.py", line 34, in execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python2.7/dist-packages/django/db/backends/mysql/base.py", line 86, in execute
    return self.cursor.execute(query, args)
  File "/usr/lib/pymodules/python2.7/MySQLdb/cursors.py", line 176, in execute
    if not self._defer_warnings: self._warning_check()
  File "/usr/lib/pymodules/python2.7/MySQLdb/cursors.py", line 92, in _warning_check
    warn(w[-1], self.Warning, 3)
  Data truncated for column 'word_spelling' at row 1

因此,这些单词中只有一部分存储在mysql中。我想知道原因。

1 个答案:

答案 0 :(得分:0)

CharFields具有max_length属性。生成数据库时设置了什么 对于Word.object.get(pk=1).word_spelling

与你的警告无关但是 建议关闭文件或使用with语句打开它。

with open('/home/jacos/sorted-gre.txt') as f:
    for line in f.readlines():
        if line:
            p = Word(word_spelling = line)
            p.save()