Django South - db.alter 函数删除 null=true Blank=true 失败,mysql 失败

发布于 2024-10-14 11:27:21 字数 4834 浏览 2 评论 0原文

通过删除这两个值将日期字段从 null=True 和 Blank=True 更改为 required 时,使用 db.alter 命令时遇到问题。

当以下行被注释掉时,迁移运行就不会出现问题。

    db.alter_column('milestones_milestone', 'date', self.gf('django.db.models.fields.DateField')(default='2011-01-01'))

这应该将列描述从: 更改

'milestones.milestone': {
  'date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
},

'milestones.milestone': {
  'date': ('django.db.models.fields.DateField', [], {default:'2011-01-01'}),
},

当迁移中保留上述行时,我得到的错误:

 - Migrating forwards to 0002_auto__add_field_milestone_type__chg_field_milestone_date__add_field_mi.
 > milestones:0002_auto__add_field_milestone_type__chg_field_milestone_date__add_field_mi
 ! 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 `milestones_milestone` DROP COLUMN `type` CASCADE; []
   = ALTER TABLE `milestones_milestonetemplate` DROP COLUMN `type` CASCADE; []

 ! 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(global_settings)
  File "C:\Python26\lib\site-packages\django\core\management\__init__.py", line 438, in execute_manager
    utility.execute()
  File "C:\Python26\lib\site-packages\django\core\management\__init__.py", line 379, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Python26\lib\site-packages\django\core\management\base.py", line 191, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "C:\Python26\lib\site-packages\django\core\management\base.py", line 218, in execute
    output = self.handle(*args, **options)
  File "C:\SQE_Dashboard\SQE Dashboard-mimercha\SQE Dashboard\dashboard\lib\south\management\commands\migrate.py", line 109, in ha
ndle
    ignore_ghosts = ignore_ghosts,
  File "C:\SQE_Dashboard\SQE Dashboard-mimercha\SQE Dashboard\dashboard\lib\south\migration\__init__.py", line 202, in migrate_app

    success = migrator.migrate_many(target, workplan, database)
  File "C:\SQE_Dashboard\SQE Dashboard-mimercha\SQE Dashboard\dashboard\lib\south\migration\migrators.py", line 292, in migrate_ma
ny
    result = self.migrate(migration, database)
  File "C:\SQE_Dashboard\SQE Dashboard-mimercha\SQE Dashboard\dashboard\lib\south\migration\migrators.py", line 125, in migrate
    result = self.run(migration)
  File "C:\SQE_Dashboard\SQE Dashboard-mimercha\SQE Dashboard\dashboard\lib\south\migration\migrators.py", line 99, in run
    return self.run_migration(migration)
  File "C:\SQE_Dashboard\SQE Dashboard-mimercha\SQE Dashboard\dashboard\lib\south\migration\migrators.py", line 81, in run_migrati
on
    migration_function()
  File "C:\SQE_Dashboard\SQE Dashboard-mimercha\SQE Dashboard\dashboard\lib\south\migration\migrators.py", line 57, in <lambda>
    return (lambda: direction(orm))
  File "C:\SQE_Dashboard\SQE Dashboard-mimercha\SQE Dashboard\dashboard\milestones\migrations\0002_auto__add_field_milestone_type_
_chg_field_milestone_date__add_field_mi.py", line 15, in forwards
    db.alter_column('milestones_milestone', 'date', self.gf('django.db.models.fields.DateField')(default='2011-01-01'))
  File "C:\SQE_Dashboard\SQE Dashboard-mimercha\SQE Dashboard\dashboard\lib\south\db\generic.py", line 373, in alter_column
    self.execute("ALTER TABLE %s %s;" % (self.quote_name(table_name), sql), values)
  File "C:\SQE_Dashboard\SQE Dashboard-mimercha\SQE Dashboard\dashboard\lib\south\db\generic.py", line 137, in execute
    cursor.execute(sql, params)
  File "C:\Python26\lib\site-packages\django\db\backends\util.py", line 15, in execute
    return self.cursor.execute(sql, params)
  File "C:\Python26\lib\site-packages\django\db\backends\mysql\base.py", line 86, in execute
    return self.cursor.execute(query, args)
  File "C:\Python26\lib\site-packages\MySQLdb\cursors.py", line 173, in execute
    self.errorhandler(self, exc, value)
  File "C:\Python26\lib\site-packages\MySQLdb\connections.py", line 36, in defaulterrorhandler
    raise errorclass, errorvalue
django.db.utils.DatabaseError: (1265, "Data truncated for column 'date' at row 512")

我正在使用:

South 0.71 注意:我尝试升级到 0.73 并发现 0.73 给了我同样的错误并破坏了我的脚本加载较旧的装置时。

Django 1.2.1

python 库:MySQLDdb DB API v2.0 兼容,修订版 603

mysql Ver 14.14 Distrib 5.1.51,适用于 Win32 (ia32)

InnoDB 存储引擎

Having trouble with the db.alter command when changing a date field from null=True and blank=True to required by removing these two values.

When the below line is commented out, the migration runs without a problem.

    db.alter_column('milestones_milestone', 'date', self.gf('django.db.models.fields.DateField')(default='2011-01-01'))

This should change the column description from:

'milestones.milestone': {
  'date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
},

to

'milestones.milestone': {
  'date': ('django.db.models.fields.DateField', [], {default:'2011-01-01'}),
},

When the above line is left in the migration, the error I get:

 - Migrating forwards to 0002_auto__add_field_milestone_type__chg_field_milestone_date__add_field_mi.
 > milestones:0002_auto__add_field_milestone_type__chg_field_milestone_date__add_field_mi
 ! 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 `milestones_milestone` DROP COLUMN `type` CASCADE; []
   = ALTER TABLE `milestones_milestonetemplate` DROP COLUMN `type` CASCADE; []

 ! 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(global_settings)
  File "C:\Python26\lib\site-packages\django\core\management\__init__.py", line 438, in execute_manager
    utility.execute()
  File "C:\Python26\lib\site-packages\django\core\management\__init__.py", line 379, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Python26\lib\site-packages\django\core\management\base.py", line 191, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "C:\Python26\lib\site-packages\django\core\management\base.py", line 218, in execute
    output = self.handle(*args, **options)
  File "C:\SQE_Dashboard\SQE Dashboard-mimercha\SQE Dashboard\dashboard\lib\south\management\commands\migrate.py", line 109, in ha
ndle
    ignore_ghosts = ignore_ghosts,
  File "C:\SQE_Dashboard\SQE Dashboard-mimercha\SQE Dashboard\dashboard\lib\south\migration\__init__.py", line 202, in migrate_app

    success = migrator.migrate_many(target, workplan, database)
  File "C:\SQE_Dashboard\SQE Dashboard-mimercha\SQE Dashboard\dashboard\lib\south\migration\migrators.py", line 292, in migrate_ma
ny
    result = self.migrate(migration, database)
  File "C:\SQE_Dashboard\SQE Dashboard-mimercha\SQE Dashboard\dashboard\lib\south\migration\migrators.py", line 125, in migrate
    result = self.run(migration)
  File "C:\SQE_Dashboard\SQE Dashboard-mimercha\SQE Dashboard\dashboard\lib\south\migration\migrators.py", line 99, in run
    return self.run_migration(migration)
  File "C:\SQE_Dashboard\SQE Dashboard-mimercha\SQE Dashboard\dashboard\lib\south\migration\migrators.py", line 81, in run_migrati
on
    migration_function()
  File "C:\SQE_Dashboard\SQE Dashboard-mimercha\SQE Dashboard\dashboard\lib\south\migration\migrators.py", line 57, in <lambda>
    return (lambda: direction(orm))
  File "C:\SQE_Dashboard\SQE Dashboard-mimercha\SQE Dashboard\dashboard\milestones\migrations\0002_auto__add_field_milestone_type_
_chg_field_milestone_date__add_field_mi.py", line 15, in forwards
    db.alter_column('milestones_milestone', 'date', self.gf('django.db.models.fields.DateField')(default='2011-01-01'))
  File "C:\SQE_Dashboard\SQE Dashboard-mimercha\SQE Dashboard\dashboard\lib\south\db\generic.py", line 373, in alter_column
    self.execute("ALTER TABLE %s %s;" % (self.quote_name(table_name), sql), values)
  File "C:\SQE_Dashboard\SQE Dashboard-mimercha\SQE Dashboard\dashboard\lib\south\db\generic.py", line 137, in execute
    cursor.execute(sql, params)
  File "C:\Python26\lib\site-packages\django\db\backends\util.py", line 15, in execute
    return self.cursor.execute(sql, params)
  File "C:\Python26\lib\site-packages\django\db\backends\mysql\base.py", line 86, in execute
    return self.cursor.execute(query, args)
  File "C:\Python26\lib\site-packages\MySQLdb\cursors.py", line 173, in execute
    self.errorhandler(self, exc, value)
  File "C:\Python26\lib\site-packages\MySQLdb\connections.py", line 36, in defaulterrorhandler
    raise errorclass, errorvalue
django.db.utils.DatabaseError: (1265, "Data truncated for column 'date' at row 512")

I'm using:

South 0.71 Note: I tried upgrading to 0.73 and found 0.73 gave me the same error and broke my scripts when loading older fixtures.

Django 1.2.1

python library: MySQLDdb DB API v2.0 compatible, revision 603

mysql Ver 14.14 Distrib 5.1.51, for Win32 (ia32)

InnoDB Storage Engine

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

毁我热情 2024-10-21 11:27:21

我刚刚遇到了同样的错误。就我而言,我不小心将列的默认值设置为 datetime.now ,这导致了数据截断。

我建议您从模型中删除默认值,设置 auto_now_add=True 并重新生成迁移文件。

I just ran into the same error. In my case I had accidentally set the column's default value to datetime.now which caused data truncation.

I'd recommend that you remove the default value from your model, set auto_now_add=True and regenerate the migration file.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文