我正在使用带有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
任何人都知道导致此错误的原因是什么?
答案 0 :(得分:1)
1)必须转义'
。
2)我看到你想在现场存储JSON?因此,必须使用"
引号http://www.w3schools.com/json/json_syntax.asp
所以,我认为这将解决问题
sources = models.TextField(default='{"users":0}')
刚刚更换了引号