问题
I'm moving django website from one server to another, and I tried to syncdb, so i've put python manage.py syncdb
, and i get this output:
Syncing...
Creating tables ...
The following content types are stale and need to be deleted:
orders | ordercontact
Any objects related to these content types by a foreign key will also
be deleted. Are you sure you want to delete these content types?
If you're unsure, answer 'no'.
Type 'yes' to continue, or 'no' to cancel: no
Installing custom SQL ...
Installing indexes ...
No fixtures found.
Synced:
> django.contrib.auth
> django.contrib.contenttypes
> django.contrib.sessions
> django.contrib.sites
> django.contrib.messages
> django.contrib.admin
> django.contrib.admindocs
> django.contrib.markup
> django.contrib.sitemaps
> django.contrib.redirects
> django_filters
> freetext
> sorl.thumbnail
> django_extensions
> south
> currencies
> pagination
> tagging
> honeypot
> core
> faq
> logentry
> menus
> news
> shop
> shop.cart
> shop.orders
Not synced (use migrations):
- dbtemplates
- contactform
- links
- media
- pages
- popularity
- testimonials
- shop.brands
- shop.collections
- shop.discount
- shop.pricing
- shop.product_types
- shop.products
- shop.shipping
- shop.tax
(use ./manage.py migrate to migrate these)
Next step was python manage.py migrate
, and this is what I've got:
Running migrations for dbtemplates:
- Migrating forwards to 0002_auto__del_unique_template_name.
> dbtemplates:0001_initial
! 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: = DROP TABLE `django_template` CASCADE; []
= DROP TABLE `django_template_sites` 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 13, in <module>
execute_manager(settings)
File "/usr/lib/python2.6/site-packages/django/core/management/__init__.py", line 438, in execute_manager
utility.execute()
File "/usr/lib/python2.6/site-packages/django/core/management/__init__.py", line 379, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/lib/python2.6/site-packages/django/core/management/base.py", line 191, in run_from_argv
self.execute(*args, **options.__dict__)
File "/usr/lib/python2.6/site-packages/django/core/management/base.py", line 220, in execute
output = self.handle(*args, **options)
File "/usr/lib/python2.6/site-packages/South-0.7.3-py2.6.egg/south/management/commands/migrate.py", line 105, in handle
ignore_ghosts = ignore_ghosts,
File "/usr/lib/python2.6/site-packages/South-0.7.3-py2.6.egg/south/migration/__init__.py", line 191, in migrate_app
success = migrator.migrate_many(target, workplan, database)
File "/usr/lib/python2.6/site-packages/South-0.7.3-py2.6.egg/south/migration/migrators.py", line 221, in migrate_many
result = migrator.__class__.migrate_many(migrator, target, migrations, database)
File "/usr/lib/python2.6/site-packages/South-0.7.3-py2.6.egg/south/migration/migrators.py", line 292, in migrate_many
result = self.migrate(migration, database)
File "/usr/lib/python2.6/site-packages/South-0.7.3-py2.6.egg/south/migration/migrators.py", line 125, in migrate
result = self.run(migration)
File "/usr/lib/python2.6/site-packages/South-0.7.3-py2.6.egg/south/migration/migrators.py", line 99, in run
return self.run_migration(migration)
File "/usr/lib/python2.6/site-packages/South-0.7.3-py2.6.egg/south/migration/migrators.py", line 81, in run_migration
migration_function()
File "/usr/lib/python2.6/site-packages/South-0.7.3-py2.6.egg/south/migration/migrators.py", line 57, in <lambda>
return (lambda: direction(orm))
File "/usr/lib/python2.6/site-packages/django_dbtemplates-1.3-py2.6.egg/dbtemplates/migrations/0001_initial.py", line 18, in forwards
('last_changed', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)),
File "/usr/lib/python2.6/site-packages/South-0.7.3-py2.6.egg/south/db/generic.py", line 226, in create_table
', '.join([col for col in columns if col]),
File "/usr/lib/python2.6/site-packages/South-0.7.3-py2.6.egg/south/db/generic.py", line 150, in execute
cursor.execute(sql, params)
File "/usr/lib/python2.6/site-packages/django/db/backends/util.py", line 34, in execute
return self.cursor.execute(sql, params)
File "/usr/lib/python2.6/site-packages/django/db/backends/mysql/base.py", line 86, in execute
return self.cursor.execute(query, args)
File "/usr/lib64/python2.6/site-packages/MySQLdb/cursors.py", line 174, in execute
self.errorhandler(self, exc, value)
File "/usr/lib64/python2.6/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
raise errorclass, errorvalue
_mysql_exceptions.OperationalError: (1050, "Table 'django_template' already exists")
My question is do I need to remove tables django_template
and django_template_sites
from MySQL? Both tables are empty.
I'm running on CentOS 6, django 1.3.1, python 2.6
回答1:
Try
syncdb --all
as I have the same problem and --all just works.
I found this solution here https://github.com/divio/django-cms/issues/1343
回答2:
This might help others going through the same issue.
Since your database is to be created now and there are no migrations needed, after doing what Ahmad mentioned, also do a fake migration so south will mark all migration scripts as already run. In short, run these.
syncdb --all
migrate --fake
Please note that if you already have data in your database you shouldn't use syncdb --all.
回答3:
$python manage.py syncdb --migrate
this migrates what has to be migrated
worked for me (django 1.4)
回答4:
Another alternative is mark that first migration as done:
./manage.py migrate dbtemplates --fake 0001
It seems to be that you already have in your database the schema that you want to create.
来源:https://stackoverflow.com/questions/10834237/django-syncdb-and-migrate