Джанго mysql при сохранении объекта получил предупреждение - PullRequest
0 голосов
/ 29 февраля 2012

Я только что написал небольшое приложение для хранения слов в моей базе данных mysql, используя Django. Я читаю данные из текстового файла, который очень хорошо организован, например: Текстовый файл выглядит так:

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 является первичным ключом. Затем пришло это предупреждение: Traceback (последний вызов был последним):

  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 голосов
/ 29 февраля 2012

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...