On 08/30/2016 10:52 PM,
bin604...@gmail.com wrote:
> I am using PostgreSQL and Alembic for migration. When I added new column
> to my User table Alembic generated migration with the following script:
>
> from alembic import op
> import sqlalchemy as sa
> import random
>
> def generate_toke():
> return random.random()
>
> def upgrade():
> op.add_column('user', sa.Column('token', sa.String(), nullable=True ))
> op.execute('some code here')
>
> What I actually want to do is autogenerating the value of token by the
> generate_toke function for existing data in my DB.
>
> Is there a solution?
Because this is a Python function, simplest way to run the actual
function (which might not be necessary, see below), run an update()
statement in a loop:
from sqlalchemy import Table, MetaData, select
# make a local Table object
user_table = Table(
'user', MetaData(),
# whatever the primary key is goes here, for example "user_id"
Column('user_id', Integer, primary_key=True),
# then your token column
Column('token', String())
)
connection = op.get_bind()
for row in connection.execute(select([user_table.c.user_id])):
connection.execute(
user_table.update().
values(token=generate_token()).
where(
user_table.c.id == row['user_id'])
)
now, if the function is truly the "random()" function, good news.
Postgresql has that already. So instead of all the above, just do:
op.execute("update user set token=random()")
> --
> You received this message because you are subscribed to the Google
> Groups "sqlalchemy-alembic" group.
> To unsubscribe from this group and stop receiving emails from it, send
> an email to
sqlalchemy-alem...@googlegroups.com
> <mailto:
sqlalchemy-alem...@googlegroups.com>.
> For more options, visit
https://groups.google.com/d/optout.