Hello!
I have a web2py application with a sqlite database. The structure of my db.py file is something like this:
db = DAL('sqlite://storage.sqlite', migrate=False)
...
db.define_table('table1',
Field('field1'),
Field('field2'))
db.executesql('CREATE INDEX IF NOT EXISTS table1_field1 ON table1 (field1)')
db.define_table('table2',
Field('field1'),
Field('field2'))
db.executesql('CREATE INDEX IF NOT EXISTS table2_field1 ON table2 (field1)')
...
Each time I want to add a new table or a new field, I remove ", migrate=False", make the change and, after it has been applied I add ", migrate=False" again.
This has been working very well so far.
Inside my database folder I have this files:
storage.sqlite
c8b1837fhj47blahblahblah_table1.table
c8b1837fhj47blahblahblah_table2.table
Well, now my problem. Last time I made an update (I added a new table) in my database, the migration was broken. I don't know why but I guess it was probably because I removed accidentally the .table files and after restore them maybe they were too old. I tried everything and finally the migration worked and the database added the new table.
Now my db.py file is something like this:
db = DAL('sqlite://storage.sqlite', migrate=False)
...
db.define_table('table1',
Field('field1'),
Field('field2'))
db.executesql('CREATE INDEX IF NOT EXISTS table1_field1 ON table1 (field1)')
db.define_table('table2',
Field('field1'),
Field('field2'))
db.executesql('CREATE INDEX IF NOT EXISTS table2_field1 ON table2 (field1)')
db.define_table('newtable',
Field('field1'))
db.executesql('CREATE INDEX IF NOT EXISTS newtable_field1 ON newtable (field1)')
...
but the first strange thing, in my database folder now I have this:
storage.sqlite
c8b1837fhj47blahblahblah_table1.table
c8b1837fhj47blahblahblah_table2.table
newtable.table
Why newtable.table doesn't have the c8b1837fhj47blahblahblah part? Is this important?
The thing is that I need to add a new field to table1 table and I'm getting errors and I don't know how to solve them.
Just removing the ", migrate=False" part I get the error "newtable is already defined" and the application fails.
I've tried to use db = DAL('sqlite://storage.sqlite', fake_migrate=True
) and have no errors. Then I add my new field but no changes are applied to the database.
What am i doing wrong? how could I fix this?
Kind regards and thank you very much!