Ahhh, PassiveDefault in that way worked.  Excellent.  Thank you.

On Jun 8, 1:43 pm, Michael Bayer <[EMAIL PROTECTED]> wrote:
> this syntax, from your example:
>
> Column('workorderlines_rowid', Numeric(10,0),
> default=Sequence('workorderlines_rowid_seq')),
>
> is wrong.  that is why you are getting this:
>
> VALUES (%(company)s, %(store)s, %(barcode)s, %
> (workorder)s, %(line)s, %(suffix)s, %
> (workorderlines_rowid)s)' {'suffix': '', 'workorderlines_rowid':
> Sequence
> ('workorderlines_rowid_seq',start=None,increment=None,optional=False),
>
> notice the "Sequence" schema object shoved into your bind parameters.
>
> the correct syntax is:
>
> Column('workorderlines_rowid', Numeric(10,0),
> Sequence('workorderlines_rowid_seq')),
>
> however, since its not a primary key column, you can forego putting
> the explicit Sequence there; technically you dont need to put any
> kind of default anything on it.
>
> if you'd like the object-relational-mapper specifically to "post-
> fetch" the row after the default has been applied, you probably want
> to specify it at least as:
>
> Column('workorderlines_rowid', PassiveDefault(""), Numeric(10,0)),
>
> where the PassiveDefault indicates to the ORM that a default fired
> off on the DB side and should be fetched.  the contents of the
> PassiveDefault shouldnt matter since you arent issuing CREATE TABLE
> statements.
>
> On Jun 8, 2007, at 12:17 PM, A. Grossman wrote:
>
>
>
> > Hmmm.  Perhaps I oversimplified my code for the example.  The
> > workorderlines_rowid isn't actually a primary key; given the following
> > code where it is not one:
>
> > from sqlalchemy import *
>
> > db = create_engine('postgres://[EMAIL PROTECTED]:5432/fleettest')
>
> > db.echo = True
>
> > metadata = BoundMetaData(db)
>
> > workorderlines_table = Table('workorderlines', metadata,
> >    Column('company', Integer, nullable=False, autoincrement=False),
> >    Column('store', Integer, nullable=False, autoincrement=False),
> >    Column('barcode', Numeric(10,0)),
> >    Column('workorder', Integer, nullable=False, autoincrement=False),
> >    Column('line', Integer, nullable=False, autoincrement=False),
> >    Column('suffix', Unicode(1), nullable=False, default=''),
> >    Column('workorderlines_rowid', Numeric(10,0),
> > default=Sequence('workorderlines_rowid_seq')),
> >    PrimaryKeyConstraint('company', 'store', 'workorder', 'line',
> > 'suffix'),
> > )
>
> > class Workorder_Line(object):
> >     def __repr__(self):
> >        return "Workorder_Line: %d %d %d %d%s" % (
> >            self.company, self.store, self.workorder, self.line,
> > self.suffix)
>
> > mapper(Workorder_Line, workorderlines_table)
>
> > def main():
> >     session = create_session()
> >     obj = Workorder_Line()
> >     session.save(obj)
> >     session.flush()
>
> > if __name__ == '__main__': main()
>
> > sqlalchemy.exceptions.SQLError: (ProgrammingError) can't adapt 'INSERT
> > INTO workorderlines (company, store, barcode, workorder, line, suffix,
> > workorderlines_rowid) VALUES (%(company)s, %(store)s, %(barcode)s, %
> > (workorder)s, %(line)s, %(suffix)s, %
> > (workorderlines_rowid)s)' {'suffix': '', 'workorderlines_rowid':
> > Sequence
> > ('workorderlines_rowid_seq',start=None,increment=None,optional=False),
> > 'company': None, 'barcode': None, 'line': None, 'workorder': None,
> > 'store': None}
>
> > is the error given.  I'd expect to get an error on not having
> > specified values for the primary key fields, but it appears instead to
> > be confused with the sequence object it's getting for the
> > workorderlines_rowid field.
>
> > On Jun 8, 11:49 am, Michael Bayer <[EMAIL PROTECTED]> wrote:
> >> On Jun 8, 11:27 am, "[EMAIL PROTECTED]" <[EMAIL PROTECTED]>
> >> wrote:
>
> >>> Hello.  I am receiving the error:
>
> >>> sqlalchemy.exceptions.SQLError: (ProgrammingError) can't adapt
> >>> 'INSERT
> >>> INTO workorderlines (workorderlines_rowid) VALUES (%
> >>> (workorderlines_rowid)s)' {'workorderlines_rowid':
> >>> Sequence
> >>> ('workorderlines_rowid_seq',start=None,increment=None,optional=False
> >>> )}
>
> >>> running the following simplified version of what I am working with:
>
> >>> from sqlalchemy import *
>
> >>> db = create_engine('postgres://[EMAIL PROTECTED]:5432/fleettest')
>
> >>> db.echo = True
>
> >>> metadata = BoundMetaData(db)
>
> >>> workorderlines_table = Table('workorderlines', metadata,
> >>>         Column('workorderlines_rowid', Numeric(10,0),
> >>> default=Sequence('workorderlines_rowid_seq')),
> >>>         PrimaryKeyConstraint('workorderlines_rowid'),
> >>> )
>
> >> the "default" keyword argument is for literal values or python
> >> functions.  to use Sequence:
>
> >> t = Table('foo', metadata, Column('id', Integer,
> >> Sequence('my_sequence'), primary_key=True))
>
> >> the postgres dialect currently has the restriction that PK values
> >> must
> >> go in as explicitly inserted values, as opposed to a default firing
> >> off implicitly on the PG side.  this is documented here:http://
> >>www.sqlalchemy.org/docs/metadata.html#metadata_defaults_passiv...


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to