#1368 closed defect (fixed)
Command 'python manage.py init' doesn't work with MySQL 5.0.17/18 under Windows
Reported by: | Owned by: | Adrian Holovaty | |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | magic-removal |
Severity: | major | Keywords: | init mysql error #1005 |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
Hi everyone, I think I've found a bug.
The problem
Today I checked out the magic-removal branch and tried to use it. I started a project (with django-admin.py startproject), I changed settings.py to add the correct database settings, and then I tried to initialize the database (with python manage.py init). The following error was displayed :
Error: models couldn't be installed. Possible reasons: * The database isn't running or isn't configured correctly. * At least one of the database tables already exists. * The SQL was invalid. Hint: Look at the output of 'django-admin.py sqlall models'. That's the SQL this command wasn't able to run. The full error: (1005, "Can't create table '.\\django\\#sql-780_6b.frm' (errno: 150)") Error: The database couldn't be initialized. Traceback (most recent call last): File "C:\Program Files\Python\lib\site-packages\django\core\management.py", line 494, in init install(auth_app) File "C:\Program Files\Python\lib\site-packages\django\core\management.py", line 548, in install sys.exit(1) SystemExit: 1
After a little search on my own, I found that the following SQL query :
ALTER TABLE `auth_message` ADD CONSTRAINT `user_id_referencing_auth_user_id` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`);
was the source of the problem. Indeed, MySQL complained because the user_id field wasn't exactly the same type as the id field in table auth_user.
The temporary solution
I managed to install the auth app by manually entering the output of python manage.py sqlall auth and adding the following query before the one that caused the problem :
ALTER TABLE `auth_message` CHANGE `user_id` `user_id` MEDIUMINT( 9 ) UNSIGNED NOT NULL
The type of user_id and the type of auth_user.id were now equivalent, and the query succeeded without problem.
So that's it, I don't think that using Windows is the problem here, maybe I'll try on Linux with the appropriate version of MySQL.
If this can be reproduced, that's a big problem because it means you can't initialize a project with the latest MySQL 5.0.
Thanks for your time
I can confirm this with MySQL 4.1.12 under Linux. The auto-generated primary key should be an INT(11), just as the foreign key field. Right now primary keys are generated as MEDIUMINT(9).