On Monday, March 26, 2012 9:00:26 AM UTC-5, Michael Bayer wrote:
>
>
> On Mar 26, 2012, at 9:58 AM, Michael Bayer wrote:
>
> > 
> > On Mar 25, 2012, at 7:21 PM, John Anderson wrote:
> > 
> >> I have an existing app that I want to add some features to, so I 
> created the new models and then ran --autogenerate and it created me a 
> revision file where in downgrade it was creating all my files and in 
> upgrade it was dropping the tables.   That was backwards from what I 
> expected, since my database didn't have the tables but the model did.
> >> 
> >> Am I thinking about this in the wrong way?
> >> 
> >> def upgrade():
> >>    ### commands auto generated by Alembic - please adjust! ###
> >>    op.drop_table(u'presentation')
> >>    op.drop_table(u'file')
> >>    ### end Alembic commands ###
> >> 
> >> def downgrade():
> >>    ### commands auto generated by Alembic - please adjust! ###
> >>    op.create_table(u'presentation',
> >>    sa.Column(u'pk', sa.INTEGER(), 
> server_default='nextval('presentation_pk_seq'::regclass)', nullable=False),
> >>    sa.Column(u'name', sa.TEXT(), nullable=True),
> >>    sa.Column(u'description', sa.TEXT(), nullable=True),
> >>    sa.Column(u'presenter', sa.TEXT(), nullable=True),
> >>    sa.Column(u'date', postgresql.TIMESTAMP(), nullable=True),
> >>    sa.PrimaryKeyConstraint(u'pk', name=u'presentation_pkey')
> >>    )
> >>    op.create_table(u'file',
> >>    sa.Column(u'pk', sa.INTEGER(), 
> server_default='nextval('file_pk_seq'::regclass)', nullable=False),
> >>    sa.Column(u'user_pk', sa.INTEGER(), nullable=False),
> >>    sa.Column(u'mimetype', sa.TEXT(), nullable=False),
> >>    sa.Column(u'uid', sa.TEXT(), nullable=False),
> >>    sa.Column(u'filename', sa.TEXT(), nullable=False),
> >>    sa.Column(u'size', sa.INTEGER(), nullable=False),
> >>    sa.ForeignKeyConstraint(['user_pk'], [u'user.pk'], 
> name=u'file_user_pk_fkey'),
> >>    sa.PrimaryKeyConstraint(u'pk', name=u'file_pkey')
> >>    )
> >>    ### end Alembic commands ###
> > 
> > the autogen you're illustrating here indicates that when you ran 
> --autogenerate, the database had two tables already present - 
> "presentation" and "file", and the MetaData object you passed to 
> EnvironmentContext.configure contained no tables.    Autogen then tries to 
> generate the changes that would relate to making the database look just 
> like the model you gave it - in this case removing those tables in the 
> database which aren't in the model.
> > 
> > Not sure how you're describing the opposite setup producing this, that's 
> not how autogenerate works.
>
> so continuing, Alembic logs everything it does when it does autogenerate 
> so inspecting that would give you the answer to what decisions it's making.
>

Ok, so here is my database:
 sontek@tacora$ (git::master~3) psql pcolalug
psql (9.1.3)
Digite «help» para obtener ayuda.

pcolalug=# \dt
             Listado de relaciones
 Esquema |       Nombre        | Tipo  | Dueño  
---------+---------------------+-------+--------
 public  | activation          | tabla | sontek
 public  | organization        | tabla | sontek
 public  | organization_member | tabla | sontek
 public  | presentation        | tabla | sontek
 public  | user                | tabla | sontek
 public  | user_group          | tabla | sontek
 public  | usergroupmember     | tabla | sontek
(7 filas)


You see there is no 'file' or 'presentations' table, but I have added those 
in my models:

class File(SUEntity):
    user_pk = Column(Integer, ForeignKey(User.pk), nullable=False)
    mimetype = Column(UnicodeText, nullable=False)
    uid = Column(UnicodeText, nullable=False)
    filename = Column(UnicodeText, nullable=False)
    size = Column(Integer, nullable=False)


    def public_url(self, request):
        if self.uid:
            return request.static_url(os.path.join(get_data_dir(), 
'uploads/%s' % self.uid))

class Presentation(SUEntity):
    """
    A meeting we are having
    """
    name = Column(UnicodeText)
    description = Column(UnicodeText)
    date = Column(Date, nullable = False)
    presenter_pk = Column(Integer, ForeignKey(User.pk), nullable=False)
    presenter = relationship(User)
    file_pk = Column(Integer, ForeignKey(File.pk))
    file = relationship(File)


So now when alembic migration:
sontek@tacora$ (git::master) alembic revision --autogenerate -m "added 
presentation table"
INFO  [alembic.migration] Context impl PostgresqlImpl.
INFO  [alembic.migration] Will assume transactional DDL.
INFO  [alembic.autogenerate] Detected removed table u'presentation'
  Generating 
/home/sontek/.virtualenvs/pcolalug/src/pcolalug.com/alembic/versions/
  c390c2f027_added_presentation_t.py...done
(pcolalug)~/.virtualenvs/pcolalug/src/pcolalug.com
sontek@tacora$ (git::master) cat 
alembic/versions/c390c2f027_added_presentation_t.py 
"""added presentation table

Revision ID: c390c2f027
Revises: None
Create Date: 2012-03-26 11:22:24.972917

"""

# revision identifiers, used by Alembic.
revision = 'c390c2f027'
down_revision = None

from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql

def upgrade():
    ### commands auto generated by Alembic - please adjust! ###
    op.drop_table(u'presentation')
    ### end Alembic commands ###

def downgrade():
    ### commands auto generated by Alembic - please adjust! ###
    op.create_table(u'presentation',
    sa.Column(u'pk', sa.INTEGER(), 
server_default='nextval('presentation_pk_seq'::regclass)', nullable=False),
    sa.Column(u'name', sa.TEXT(), nullable=True),
    sa.Column(u'description', sa.TEXT(), nullable=True),
    sa.Column(u'presenter', sa.TEXT(), nullable=True),
    sa.Column(u'date', postgresql.TIMESTAMP(), nullable=True),
    sa.PrimaryKeyConstraint(u'pk', name=u'presentation_pkey')
    )
    ### end Alembic commands ###


So it must be detecting that my base class doesn't have any models defined 
yet? So I just have to figure out why the metadata isn't setup just yet?

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/sqlalchemy/-/MpNZ9Hhv8AwJ.
To post to this group, send email to sqlalchemy@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to