To use fake_migrate, first you have to revert your model definition to the 
old version (that matches the existing db), run the app. This will make 
web2py update the table definition file. Now, you can change your models 
and set fake_migrate to False, and migrate to True.

On Sunday, April 13, 2014 5:49:17 PM UTC-4, Wonton wrote:
>
> 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!
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to