On Dec 18, 2007, at 10:42 AM, Jonathan Gardner wrote:

>
> Shouldn't SQLAlchemy throw an exception when you try to grab the next
> value of a non-existant sequence?

for a database which supports sequences, it will.  It appears that for  
DB's which don't, executing a sequence explicitly is silently ignoring  
it; I would consider this to be a bug. However, when a Sequence  
attached to a Column for the purpose of generating new default values  
for that column, during an INSERT, it is ignored for a database that  
doesnt support sequences, like sqlite.  This is by design and it is so  
that a single Table construct can be used with multiple database  
backends (this should be in the docs too).

> Should SQLAlchemy implement a crude version of sequences in Python to
> cover up deficient SQL implemetnations? I imagine it is technically
> possible. We can have a table that stores the last value of the
> sequence and its parameters, and then in those databases just go look
> up the last state of the sequence there. But is this in the spirit of
> the SQLAlchemy design?

sure, you can write such a function and attach it as the "default"  
generator on any Column.  As far as should such an ID generator be  
included with SQLAlchemy, I would support having some ID generators  
available as optional constructs to use on Tables, and I'd like to see  
generators like UUID, hilo, etc.  As of yet nobody has contributed  
these.

>
> Should sequences be sequences first-class citizens of the schema like
> tables are? That is, why do I have to create them and drop them
> separately?

They are first class citizens.  if your Sequence is sitting inside of  
a Column as its default generator, it will be created and dropped  
along with the Table which its associated with.    As far as being  
able to associate the Sequence with MetaData directly without the  
Table serving as a host, see below, I dont have any issue with such an  
enhancement.  Nobody has ever asked for this feature before since a  
Sequence usually associates with a specific table.

> Why can't we have a "next()" method for sequences and then
> bind sequences to the metadata the same way tables are?

We do have a next():  nextid = engine.execute(Sequence('foo')) .   
Sequences are bound to metadata as well, as a little experimentation  
will show...the current methodology is that the Sequence is associated  
with the MetaData via one or more Tables its associated with:

 >>> from sqlalchemy import *
 >>> e = create_engine('postgres://scott:[EMAIL PROTECTED]/test')
 >>> m = MetaData()
 >>> t = Table('foo', m, Column('id', Integer, Sequence('foo_seq')))
 >>> m.bind = e
 >>> t.create()
 >>> t.c.id.default.execute()
1L

Now it may be a nice enhancement to be able to create a Sequence which  
binds to a metadata, without the Table part needing to be involved,  
such as:

Sequence('foo_id_seq', metadata)

This enhancement is fine with me.

> If you are looking for development help, I have some spare time here
> and there and this is actually interesting. If someone can point the
> way to go, I can take it from there.

if you can produce decent code, and almost more importantly good unit  
tests that ensure the decent code always works (else it might as well  
be broken), commit access is there for the taking. Start with trac  
tickets, i.e. create some and/or fix some, hang out on irc and  
sqlalchemy-devel, come up with some patches and we go from there.   
We're quite ready for many more developers.

>
>
> Otherwise, I am incredibly surprised at how well SQLAlchemy works in
> allowing me to write truly database independent applications. You have
> done something I don't think anyone else has ever done in the history
> of computing, and for that you should be proud.


thanks for the compliments !  see you at Pycon.



--~--~---------~--~----~------------~-------~--~----~
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