This means that the norm of creating your model and then using
'tg-admin sql create' will not work for creating the needed InnoDB
tables; the tables created will be of the non-transactional MyISAM
type. Instead, it will be necessary to figure out what SQLObject would
do (probably using debugging output), and then do it manually, with
just appending 'ENGINE=INNODB' onto the CREATE statements.

You can do this quite easily by hand by simple doing a `tg-admin sql sql`, and changing the output to contain the relevant 'ENGINE=INNODB' data. I also believe that you can set up your MySQL installation to use InnoDB by default, although I am not positive, as I tend to avoid MySQL.

This sure breaks the 'ease of use' paradigm for TurboGears.  What work
is being done to address this problem?

Not really. When you choose a database backend, you should be aware of the limitations of that database, and be prepared to deal with them. SQLite, for example, also doesn't really support transactions, but it can still be used as an SQLObject backend. Using transactions on a database that doesn't support transactions (SQLite, MySQL MyISAM backend, etc.) won't hurt anything, but transactions just won't work. This is something that you should know going into using either MySQL or SQLite.

It might be wise, however, to have tg-admin prompt a user to ask which storage mechanism to use if MySQL is the database type, and warn them that transactions don't work unless you pick InnoDB.

In the meantime, PostgreSQL is also free, and is a real RDBMS that doesn't suffer from a weak default storage backend.

--
Jonathan LaCour
http://cleverdevil.org


Reply via email to