Как обновить тип данных столбца в Django - PullRequest
2 голосов
/ 01 июля 2010

У меня новичок в python и django. Я создаю приложение poll и в этом приложении после создания моделей опрос и выбор с помощью «Юг».Я хочу изменить длину поля вопроса с 200 на 300, но не могу добиться этого даже при использовании на юге.

Я запустил команду python manage.py schemamigration polls --initial для создания файла миграциизатем я делаю изменение в поле вопроса опроса, которое является (question = models.CharField (max_length = 250)), изменяет max_length с 200 на 250.

и снова запускает python manage.py schemamigration polls - автоматическисоздать новый файл миграции.

после этого все, что я запускаю python manage.py, переносит опросы и показывает следующую ошибку:

C:\Python26\lib\site-packages\MySQLdb\__init__.py:34: DeprecationWarning: the sets module is deprecated
  from sets import ImmutableSet
Running migrations for polls:
 - Migrating forwards to 0003_auto__chg_field_poll_question.
 > polls:0003_auto__chg_field_poll_question
 ! Error found during real run of migration! Aborting.

 ! Since you have a database that does not support running
 ! schema-altering statements in transactions, we have had
 ! to leave it in an interim state between migrations.

! You *might* be able to recover with:   = ALTER TABLE `polls_poll` ; []
   = ALTER TABLE `polls_poll` MODIFY `question` varchar(200) NOT NULL;; []
   = ALTER TABLE `polls_poll` ALTER COLUMN `question` DROP DEFAULT; []

 ! The South developers regret this has happened, and would
 ! like to gently persuade you to consider a slightly
 ! easier-to-deal-with DBMS.
 ! NOTE: The error which caused the migration to fail is further up.
Traceback (most recent call last):
  File "manage.py", line 11, in <module>
    execute_manager(settings)
  File "C:\Python26\lib\site-packages\django\core\management\__init__.py", line
362, in execute_manager
    utility.execute()
  File "C:\Python26\lib\site-packages\django\core\management\__init__.py", line
303, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Python26\lib\site-packages\django\core\management\base.py", line 195,
 in run_from_argv
    self.execute(*args, **options.__dict__)
  File "C:\Python26\lib\site-packages\django\core\management\base.py", line 222,
 in execute
    output = self.handle(*args, **options)
  File "C:\Python26\lib\site-packages\south\management\commands\migrate.py", lin
e 109, in handle
    ignore_ghosts = ignore_ghosts,
  File "C:\Python26\lib\site-packages\south\migration\__init__.py", line 202, in
 migrate_app
    success = migrator.migrate_many(target, workplan, database)
  File "C:\Python26\lib\site-packages\south\migration\migrators.py", line 220, i
n migrate_many
    result = migrator.__class__.migrate_many(migrator, target, migrations, datab
ase)
  File "C:\Python26\lib\site-packages\south\migration\migrators.py", line 291, i
n migrate_many
    result = self.migrate(migration, database)
  File "C:\Python26\lib\site-packages\south\migration\migrators.py", line 125, i
n migrate
    result = self.run(migration)
  File "C:\Python26\lib\site-packages\south\migration\migrators.py", line 99, in
 run
    return self.run_migration(migration)
  File "C:\Python26\lib\site-packages\south\migration\migrators.py", line 81, in
 run_migration
    migration_function()
  File "C:\Python26\lib\site-packages\south\migration\migrators.py", line 57, in
 <lambda>
    return (lambda: direction(orm))
  File "C:\mysite\..\mysite\polls\migrations\0003_auto__chg_field_poll_question.
py", line 12, in forwards
    db.alter_column('polls_poll', 'question', self.gf('django.db.models.fields.C
harField')(max_length=250))
  File "C:\Python26\lib\site-packages\south\db\generic.py", line 330, in alter_c
olumn
    self.delete_foreign_key(table_name, name)
  File "C:\Python26\lib\site-packages\south\db\generic.py", line 588, in delete_
foreign_key
    constraints = list(self._constraints_affecting_columns(table_name, [column],
 "FOREIGN KEY"))
  File "C:\Python26\lib\site-packages\south\db\mysql.py", line 140, in _constrai
nts_affecting_columns
    """, [db_name, table_name, type])
  File "C:\Python26\lib\site-packages\south\db\generic.py", line 134, in execute

    cursor.execute(sql, params)
  File "C:\Python26\lib\site-packages\django\db\backends\util.py", line 19, in e
xecute
    return self.cursor.execute(sql, params)
  File "C:\Python26\lib\site-packages\django\db\backends\mysql\base.py", line 84
, in execute
    return self.cursor.execute(query, args)
  File "C:\Python26\lib\site-packages\MySQLdb\cursors.py", line 168, in execute
    if not self._defer_warnings: self._warning_check()
  File "C:\Python26\lib\site-packages\MySQLdb\cursors.py", line 82, in _warning_
check
    warn(w[-1], self.Warning, 3)
_mysql_exceptions.Warning: Can't find file: 'slow_log' (errno: 2)

Пожалуйста, помогите мне

0003 Похоже:

Миграция класса (SchemaMigration):

def forwards(self, orm):

    # Changing field 'Poll.question'
    db.alter_column('polls_poll', 'question', self.gf('django.db.models.fields.CharField')(max_length=250))


def backwards(self, orm):

    # Changing field 'Poll.question'
    db.alter_column('polls_poll', 'question', self.gf('django.db.models.fields.CharField')(max_length=200))

Ansh J

Ответы [ 4 ]

2 голосов
/ 01 июля 2010

Иди уже изменяй таблицу mysql из консоли mysql!

python manage.py dbshell
alter table appname_modelname modify `question` varchar(200) NOT NULL;
1 голос
/ 02 июля 2010

Ваша проблема не в Django или South, а в MySQL. MySQL выкашливает следующее:

_mysql_exceptions.Warning: Can't find file: 'slow_log' (errno: 2)

и это паникует библиотеку MySQLdb, которая запускает катапультирование, хотя это просто предупреждение

Вам необходимо выяснить, почему MySQL так обеспокоен отсутствующим файлом slow_log.

1 голос
/ 02 июля 2010

Чтобы можно было с уверенностью ответить на этот вопрос, вам нужно показать миграцию 0002 и 0003 ...

Однако, мне кажется, что возникшее исключение - просто проблема с MySQL (он не может найти свой «медленный журнал»), который создает предупреждение, которое распространяется на юг, которое пересекает его.

0 голосов
/ 29 марта 2011

Я подозреваю, что у вас есть файлы general_log и slow_log frm внутри каталог базы данных mysql без соответствующих файлов данных. Если в этом случае просто 'rm' general_log.frm и slow_log.frm файлы из каталога базы данных mysql, и все эти ошибки должны идти прочь.

...