[p2pu-dev] Switching from mysql to sqlite3 for development

Jessica Ledbetter jessica at jessicaledbetter.com
Sun Aug 7 01:52:36 UTC 2011


Actually this might be from a few commits ago. I think brianloveswords had
this problem. I've been coding on branches so was a little behind on master.

Did a syncdb migrate got this error in the browser:
TemplateSyntaxError at /groups/django-101/content/documentation/

Caught DoesNotExist while rendering: Signup matching query does not exist.

If memory serves, this has happened before. So, I did what worked last time
when things got a little wonky and that was drop the database and create it
and do a syncdb --migrate again. Unfortunately, that trick didn't work.

What I got doing migrate:

Running migrations for replies:
 - Migrating forwards to
0002_auto__del_field_pagecomment_page__add_field_pagecomment_scope_content_.
 > replies: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 `replies_pagecomment`
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 26, in <module>
    execute_manager(settings)
  File
"/home/jledbetter/Envs/lernanta/lib/python2.6/site-packages/django/core/management/__init__.py",
line 438, in execute_manager
    utility.execute()
  File
"/home/jledbetter/Envs/lernanta/lib/python2.6/site-packages/django/core/management/__init__.py",
line 379, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File
"/home/jledbetter/Envs/lernanta/lib/python2.6/site-packages/django/core/management/base.py",
line 191, in run_from_argv
    self.execute(*args, **options.__dict__)
  File
"/home/jledbetter/Envs/lernanta/lib/python2.6/site-packages/django/core/management/base.py",
line 220, in execute
    output = self.handle(*args, **options)
  File
"/home/jledbetter/Envs/lernanta/lib/python2.6/site-packages/django/core/management/base.py",
line 351, in handle
    return self.handle_noargs(**options)
  File
"/home/jledbetter/Envs/lernanta/lib/python2.6/site-packages/south/management/commands/syncdb.py",
line 99, in handle_noargs
    management.call_command('migrate', **options)
  File
"/home/jledbetter/Envs/lernanta/lib/python2.6/site-packages/django/core/management/__init__.py",
line 166, in call_command
    return klass.execute(*args, **defaults)
  File
"/home/jledbetter/Envs/lernanta/lib/python2.6/site-packages/django/core/management/base.py",
line 220, in execute
    output = self.handle(*args, **options)
  File
"/home/jledbetter/Envs/lernanta/lib/python2.6/site-packages/south/management/commands/migrate.py",
line 105, in handle
    ignore_ghosts = ignore_ghosts,
  File
"/home/jledbetter/Envs/lernanta/lib/python2.6/site-packages/south/migration/__init__.py",
line 191, in migrate_app
    success = migrator.migrate_many(target, workplan, database)
  File
"/home/jledbetter/Envs/lernanta/lib/python2.6/site-packages/south/migration/migrators.py",
line 221, in migrate_many
    result = migrator.__class__.migrate_many(migrator, target, migrations,
database)
  File
"/home/jledbetter/Envs/lernanta/lib/python2.6/site-packages/south/migration/migrators.py",
line 292, in migrate_many
    result = self.migrate(migration, database)
  File
"/home/jledbetter/Envs/lernanta/lib/python2.6/site-packages/south/migration/migrators.py",
line 125, in migrate
    result = self.run(migration)
  File
"/home/jledbetter/Envs/lernanta/lib/python2.6/site-packages/south/migration/migrators.py",
line 99, in run
    return self.run_migration(migration)
  File
"/home/jledbetter/Envs/lernanta/lib/python2.6/site-packages/south/migration/migrators.py",
line 82, in run_migration
    south.db.db.execute_deferred_sql()
  File
"/home/jledbetter/Envs/lernanta/lib/python2.6/site-packages/south/db/generic.py",
line 184, in execute_deferred_sql
    self.execute(sql)
  File
"/home/jledbetter/Envs/lernanta/lib/python2.6/site-packages/south/db/generic.py",
line 150, in execute
    cursor.execute(sql, params)
  File
"/home/jledbetter/Envs/lernanta/lib/python2.6/site-packages/django/db/backends/util.py",
line 34, in execute
    return self.cursor.execute(sql, params)
  File
"/home/jledbetter/Envs/lernanta/lib/python2.6/site-packages/django/db/backends/mysql/base.py",
line 86, in execute
    return self.cursor.execute(query, args)
  File
"/home/jledbetter/Envs/lernanta/lib/python2.6/site-packages/MySQLdb/cursors.py",
line 173, in execute
    self.errorhandler(self, exc, value)
  File
"/home/jledbetter/Envs/lernanta/lib/python2.6/site-packages/MySQLdb/connections.py",
line 36, in defaulterrorhandler
    raise errorclass, errorvalue
_mysql_exceptions.OperationalError: (1005, "Can't create table
'lernanta.#sql-3d3_a9f' (errno: 150)")


Here's how I fixed it -- in case others have this. I switched from mysql to
sqlite3! Yes, probably about time :) Greg reminded me of its wonderfulness
in IRC today and this seemed the perfect time to update my local
installation too!

Sqlite3 is great for development and I've been using it elsewhere but was
using mysql for local development on Lernanta. Why? Mostly because I was
more familiar with mysql and it came that way :)

To switch to sqlite3, in your settings_local.py file put this:

DATABASES = {

    'default': {
        'NAME': '/home/jledbetter/projects/lernanta/lernanta.db',
        'ENGINE': 'django.db.backends.sqlite3',
    }

}

where your database information is. Of course, update the path to the file
(the database "name") to be where the file is that you're using. The engine
switches from msyql to sqlite3. The rest of the stuff isn't needed, I don't
think. You don't need the mysql version but feel free to just comment it out
in case you want to switch back or there are problems.

Maybe we should have the default in settings_local.dist.py to be sqlite3?
Would save us a bit of mysql documentation/headache.

Jessica


-- 
Jessica Ledbetter
http://jessicaledbetter.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.p2pu.org/pipermail/p2pu-dev/attachments/20110806/7562140d/attachment.html>


More information about the p2pu-dev mailing list