Found mysql two issues in new dal.py
First issues
mysql VARCHAR length should be 0 to 255,but web2py default varchar value was
set to length = 512,if some forgot to declare varchar length he will get
error message key too long.
Second issue
After creating FK in the model
if we declare
db.define_table('dogs',
Field('teamname'),primarykey=['teamname'],migrate=False
)
db.define_table('users',
Field('name'),
Field('team',db.dogs)
)
db.users.name.requires = IS_NOT_EMPTY()
db.users.team.requires = IS_IN_DB(db,'dogs.teamname','dogs.teamname')
sql :
CREATE TABLE users(
id INT AUTO_INCREMENT NOT NULL,
name VARCHAR(100),
team id, INDEX team__idx (team), FOREIGN KEY (team) REFERENCES
dogs(teamname),
PRIMARY KEY(id)
) ENGINE=InnoDB CHARACTER SET utf8;
Here teamname was set to string and team in the user table goes interger
,then it throws error 1005 can't create table users
'reference': 'INT, INDEX %(field_name)s__idx (%(field_name)s),
FOREIGN KEY (%(field_name)s) REFERENCES %(foreign_key)s ON DELETE
%(on_delete_action)s',
as wrokaround i have changed the dal file to
'reference': 'VARCHAR(100), INDEX %(field_name)s__idx
(%(field_name)s), FOREIGN KEY (%(field_name)s) REFERENCES %(foreign_key)s ON
DELETE %(on_delete_action)s',
then it works.