[web2py] Re: update existing project model without breaking backward compatibility...

2013-03-25 Thread Christian Foster Howes
perhaps i'm a bit old-fashioned, but i don't allow automatic SQL migrations 
on production.  what i tend to do:
 - use automatic migrations in develop
 - record the SQL executed.
 - create a script that combines the migration SQL web2py generates with my 
data migration.
 - put production into maintenance mode
 - run SQL migration script
 - update source code
 - turn production back on

so in your case my SQL migration script would:
 - create the new table
 - copy phone numbers into the new table from the existing table
 - drop the phone number column from the existing table.

that's my perspective on the problem, good luck!

christian

On Sunday, March 24, 2013 4:29:19 AM UTC-7, Loïc wrote:
>
> Hello all,
>
> let's imagine I have an app with the following model : 
>
> db.define_table('contact',
> Field('name'),
> Field('phone_number')
> )
>
> I have already deployed my app, and I have several contacts with a name 
> and a phone number.
>
> Then I realise that a contact can have multiple phone numbers. So I add a 
> table :
>
> db.define_table('phone number',
> Field('type'), #mobile phone number, home phone number, business 
> phone number ,...
> Field('phone_number'),
> Field('contact', 'reference contact'),
> )
>
> The first time I launch my app with the new model, I want to move existing 
> phone numbers from *contact *table to *phone_number *table.
> Then I want to remove 'phone_number' field from contact table to avoid 
> using it in the future
>
> What is the best way to do this automatically, and without breaking 
> backward compatibility?
>
> Thank you
>

-- 

--- 
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/groups/opt_out.




[web2py] Re: update existing project model without breaking backward compatibility...

2013-03-25 Thread Niphlod
the code can definitely check for the "requirements" and activate some kind 
of migration of data, but I'd manage it outside the web process (i.e., I'll 
prepare a script meant to be run as webp2y.py -M -S appname -R 
upgradescript.py)

On Monday, March 25, 2013 9:10:58 AM UTC+1, Loïc wrote:
>
> Thanks Mika,
>
> But my question was more about the model : 
> If I delete phone_number field from my 'contact' table, I won't be able to 
> access it and dump previous data.
> I could keep phone_number in 'contact' table and comment something like "# 
> depreceated field, do not use anymore" but I think this is messy
>
> So is it possible do do something like :
>
> *if db.myTable.myField.exists():
> #move the content of myField to another table
> db.myTable.myField.remove()*
>
> Thank you
>
>
> Le dimanche 24 mars 2013 16:01:57 UTC+1, Mika Sjöman a écrit :
>>
>> Hi
>>
>> Maybe you could dump it to a phone numbers to a csv file or a python dict 
>> with dump_data = { phone_number : contact.id,}
>>
>> Then when you created the second table, just run a for loop to populate 
>> that table with the dumped data with contact_id as a reference to the old 
>> table.
>>
>> Thats what I would do
>>
>> // web2py rookie
>>
>> cheers
>>
>>
>> Den söndagen den 24:e mars 2013 kl. 19:29:19 UTC+8 skrev Loïc:
>>>
>>> Hello all,
>>>
>>> let's imagine I have an app with the following model : 
>>>
>>> db.define_table('contact',
>>> Field('name'),
>>> Field('phone_number')
>>> )
>>>
>>> I have already deployed my app, and I have several contacts with a name 
>>> and a phone number.
>>>
>>> Then I realise that a contact can have multiple phone numbers. So I add 
>>> a table :
>>>
>>> db.define_table('phone number',
>>> Field('type'), #mobile phone number, home phone number, business 
>>> phone number ,...
>>> Field('phone_number'),
>>> Field('contact', 'reference contact'),
>>> )
>>>
>>> The first time I launch my app with the new model, I want to move 
>>> existing phone numbers from *contact *table to *phone_number *table.
>>> Then I want to remove 'phone_number' field from contact table to avoid 
>>> using it in the future
>>>
>>> What is the best way to do this automatically, and without breaking 
>>> backward compatibility?
>>>
>>> Thank you
>>>
>>

-- 

--- 
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/groups/opt_out.




[web2py] Re: update existing project model without breaking backward compatibility...

2013-03-25 Thread Loïc
Thanks Mika,

But my question was more about the model : 
If I delete phone_number field from my 'contact' table, I won't be able to 
access it and dump previous data.
I could keep phone_number in 'contact' table and comment something like "# 
depreceated field, do not use anymore" but I think this is messy

So is it possible do do something like :

*if db.myTable.myField.exists():
#move the content of myField to another table
db.myTable.myField.remove()*

Thank you


Le dimanche 24 mars 2013 16:01:57 UTC+1, Mika Sjöman a écrit :
>
> Hi
>
> Maybe you could dump it to a phone numbers to a csv file or a python dict 
> with dump_data = { phone_number : contact.id,}
>
> Then when you created the second table, just run a for loop to populate 
> that table with the dumped data with contact_id as a reference to the old 
> table.
>
> Thats what I would do
>
> // web2py rookie
>
> cheers
>
>
> Den söndagen den 24:e mars 2013 kl. 19:29:19 UTC+8 skrev Loïc:
>>
>> Hello all,
>>
>> let's imagine I have an app with the following model : 
>>
>> db.define_table('contact',
>> Field('name'),
>> Field('phone_number')
>> )
>>
>> I have already deployed my app, and I have several contacts with a name 
>> and a phone number.
>>
>> Then I realise that a contact can have multiple phone numbers. So I add a 
>> table :
>>
>> db.define_table('phone number',
>> Field('type'), #mobile phone number, home phone number, business 
>> phone number ,...
>> Field('phone_number'),
>> Field('contact', 'reference contact'),
>> )
>>
>> The first time I launch my app with the new model, I want to move 
>> existing phone numbers from *contact *table to *phone_number *table.
>> Then I want to remove 'phone_number' field from contact table to avoid 
>> using it in the future
>>
>> What is the best way to do this automatically, and without breaking 
>> backward compatibility?
>>
>> Thank you
>>
>

-- 

--- 
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/groups/opt_out.




[web2py] Re: update existing project model without breaking backward compatibility...

2013-03-24 Thread Mika Sjöman
Hi

Maybe you could dump it to a phone numbers to a csv file or a python dict 
with dump_data = { phone_number : contact.id,}

Then when you created the second table, just run a for loop to populate 
that table with the dumped data with contact_id as a reference to the old 
table.

Thats what I would do

// web2py rookie

cheers


Den söndagen den 24:e mars 2013 kl. 19:29:19 UTC+8 skrev Loïc:
>
> Hello all,
>
> let's imagine I have an app with the following model : 
>
> db.define_table('contact',
> Field('name'),
> Field('phone_number')
> )
>
> I have already deployed my app, and I have several contacts with a name 
> and a phone number.
>
> Then I realise that a contact can have multiple phone numbers. So I add a 
> table :
>
> db.define_table('phone number',
> Field('type'), #mobile phone number, home phone number, business 
> phone number ,...
> Field('phone_number'),
> Field('contact', 'reference contact'),
> )
>
> The first time I launch my app with the new model, I want to move existing 
> phone numbers from *contact *table to *phone_number *table.
> Then I want to remove 'phone_number' field from contact table to avoid 
> using it in the future
>
> What is the best way to do this automatically, and without breaking 
> backward compatibility?
>
> Thank you
>

-- 

--- 
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/groups/opt_out.