On Thu, Jun 26, 2014 at 7:47 PM, Ken Lareau <klar...@tagged.com> wrote:

> On Jun 26, 2014 7:40 PM, "Mike Bayer" <mike...@zzzcomputing.com> wrote:
> >
> > right, so a few emails ago I said:
> >
> > >  you need to put .label('environment') on that column before it finds
> its way into subq.  I dont have the mappings here to review.
> >
> > here's that:
> >
> >
> >     @environment.expression
> >     def environment(cls):
> >         return select(
> >                 [Environment.environment]
> >             ).where(
> >                 Environment.id == cls.environment_id
> >             ).correlate(cls).label('environment')
> >
> Aha... thanks.  Now I'm afraid to ask if you looked at the "after" file,
> and if so, considered it insane. :)
>
> - Ken
>
> >
> >
> >
> >
> >
> > On 6/26/14, 9:50 PM, Ken Lareau wrote:
> >>
> >> Done, new file attached (this gives the same error message as the one I
> showed initially, at least on my system).
> >>
> >> - Ken
> >> --
> >> You received this message because you are subscribed to the Google
> Groups "sqlalchemy" group.
> >> To unsubscribe from this group and stop receiving emails from it, send
> an email to sqlalchemy+unsubscr...@googlegroups.com.
> >> To post to this group, send email to sqlalchemy@googlegroups.com.
> >> Visit this group at http://groups.google.com/group/sqlalchemy.
> >> For more options, visit https://groups.google.com/d/optout.
> >
> >
> > --
> > You received this message because you are subscribed to the Google
> Groups "sqlalchemy" group.
> > To unsubscribe from this group and stop receiving emails from it, send
> an email to sqlalchemy+unsubscr...@googlegroups.com.
> > To post to this group, send email to sqlalchemy@googlegroups.com.
> > Visit this group at http://groups.google.com/group/sqlalchemy.
> > For more options, visit https://groups.google.com/d/optout.
>
Okay, trying the updated code worked with queries, but apparently not
with an insert.  Here's the basic code involved:

class AppDeployment(Base):
    __tablename__ = 'app_deployments'

    id = Column(u'AppDeploymentID', INTEGER(), primary_key=True)
    deployment_id = Column(
        u'DeploymentID',
        INTEGER(),
        ForeignKey('deployments.DeploymentID', ondelete='cascade'),
        nullable=False
    )
    app_id = Column(
        u'AppID',
        SMALLINT(display_width=6),
        ForeignKey('app_definitions.AppID', ondelete='cascade'),
        nullable=False
    )
    user = Column(String(length=32), nullable=False)
    status = Column(
        Enum(
            'complete',
            'incomplete',
            'inprogress',
            'invalidated',
            'validated',
        ),
        nullable=False
    )
    environment_id = Column(
        u'environment_id',
        INTEGER(),
        ForeignKey('environments.environmentID', ondelete='cascade'),
        nullable=False
    )
    realized = Column(
        TIMESTAMP(),
        nullable=False,
        server_default=func.current_timestamp()
    )
    environment_obj = relationship('Environment')

    @hybrid_property
    def environment(self):
        return self.environment_obj.environment

    @environment.expression
    def environment(cls):
        return select([Environment.environment]).\
                where(Environment.id == cls.environment_id).correlate(cls).\
                label('environment')

and

def _calculate_environment_id(environment):
    return (Session.query(Environment.id)
                   .filter_by(environment=environment)
                   .one())[0]

def add_app_deployment(dep_id, app_id, user, status, environment):
    """Add a tier deployment for a given deployment ID"""

    environment_id = _calculate_environment_id(environment)

    app_dep = AppDeployment(
        deployment_id=dep_id,
        app_id=app_id,
        user=user,
        status=status,
        environment_id=environment_id,
        realized=func.current_timestamp()
    )

    # Commit to DB immediately
    Session.add(app_dep)
    Session.commit()

    return app_dep

An actual call to add_app_deployment() results in this exception:

File "util.pyx", line 91, in oursql._do_warnings_query
(oursqlx/oursql.c:3969)
sqlalchemy.exc.DBAPIError: (CollatedWarningsError) (None, 'query caused
warnings', [(<class 'oursql.Warning'>, (u"Field 'environment' doesn't have
a default value", 1364L))]) u'INSERT INTO app_deployments (`DeploymentID`,
`AppID`, user, status, environment_id, realized) VALUES (?, ?, ?, ?, ?,
CURRENT_TIMESTAMP)' (4162L, 405L, 'klareau', 'inprogress', 1L)

I'm guessing something's still not quite right with the 'environment'
hybrid property
in the class? :-/


-- 
- Ken Lareau

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to