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