迁移文本字段存储字典文字时出现南语法错误

时间:2014-03-01 16:52:29

标签: python django parsing syntax django-south

我正在使用带有Python 3.3.2的Django 1.6.1的South 8.4,并在向模型引入文本字段时遇到了南方的错误:

sources = models.TextField(default="{'users':0}")
当我用空字符串替换字符串时,我愉快地迁移了。 追溯:

Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "C:\Python33\lib\site-packages\django\core\management\__init__.py", line 399, in execute_from
_command_line
    utility.execute()
  File "C:\Python33\lib\site-packages\django\core\management\__init__.py", line 392, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Python33\lib\site-packages\django\core\management\base.py", line 242, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "C:\Python33\lib\site-packages\django\core\management\base.py", line 285, in execute
    output = self.handle(*args, **options)
  File "C:\Python33\lib\site-packages\south\management\commands\migrate.py", line 111, in handle
    ignore_ghosts = ignore_ghosts,
  File "C:\Python33\lib\site-packages\south\migration\__init__.py", line 220, in migrate_app
    success = migrator.migrate_many(target, workplan, database)
  File "C:\Python33\lib\site-packages\south\migration\migrators.py", line 254, in migrate_many
    result = migrator.__class__.migrate_many(migrator, target, migrations, database)
  File "C:\Python33\lib\site-packages\south\migration\migrators.py", line 329, in migrate_many
    result = self.migrate(migration, database)
  File "C:\Python33\lib\site-packages\south\migration\migrators.py", line 133, in migrate
    result = self.run(migration, database)
  File "C:\Python33\lib\site-packages\south\migration\migrators.py", line 114, in run
    return self.run_migration(migration, database)
  File "C:\Python33\lib\site-packages\south\migration\migrators.py", line 84, in run_migration
    migration_function()
  File "C:\Python33\lib\site-packages\south\migration\migrators.py", line 60, in <lambda>
    return (lambda: direction(orm))
  File "C:\Users\Johnson\Documents\Works\Django\timewatch\times\migrations\0007_auto__add_field_acti
vity_sources.py", line 14, in forwards
    keep_default=False)
  File "C:\Python33\lib\site-packages\south\db\sqlite3.py", line 38, in add_column
    field.column: (self._column_sql_for_create(table_name, name, field, False), field_default)
  File "C:\Python33\lib\site-packages\south\db\generic.py", line 47, in _cache_clear
    return func(self, table, *args, **opts)
  File "C:\Python33\lib\site-packages\south\db\sqlite3.py", line 113, in _remake_table
    self._copy_data(table_name, temp_name, renames, added)
  File "C:\Python33\lib\site-packages\south\db\sqlite3.py", line 149, in _copy_data
    self.quote_name(src),
  File "C:\Python33\lib\site-packages\south\db\generic.py", line 282, in execute
    cursor.execute(sql, params)
  File "C:\Python33\lib\site-packages\django\db\backends\util.py", line 69, in execute
    return super(CursorDebugWrapper, self).execute(sql, params)
  File "C:\Python33\lib\site-packages\django\db\backends\util.py", line 53, in execute
    return self.cursor.execute(sql, params)
  File "C:\Python33\lib\site-packages\django\db\utils.py", line 99, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "C:\Python33\lib\site-packages\django\utils\six.py", line 490, in reraise
    raise value.with_traceback(tb)
  File "C:\Python33\lib\site-packages\django\db\backends\util.py", line 53, in execute
    return self.cursor.execute(sql, params)
  File "C:\Python33\lib\site-packages\django\db\backends\sqlite3\base.py", line 450, in execute
    return Database.Cursor.execute(self, query, params)
django.db.utils.OperationalError: near "':0}'": syntax error

任何人都知道导致此错误的原因是什么?

1 个答案:

答案 0 :(得分:1)

1)必须转义'

2)我看到你想在现场存储JSON?因此,必须使用"引号http://www.w3schools.com/json/json_syntax.asp

引用密钥

所以,我认为这将解决问题

sources = models.TextField(default='{"users":0}')

刚刚更换了引号