That absolutely solves my issue. I had a serious suspicion I was missing 
something, and it was to look at the Column options, not just the Sequence. 

Thanks a ton.

On Jun 26, 2013, at 7:44 PM, Michael Bayer <mike...@zzzcomputing.com> wrote:

> 
> On Jun 26, 2013, at 1:26 PM, Mat Mathews <m...@miga.me> wrote:
> 
>> Thanks for the quick reply.
>> 
>> If I modify the name of the sequence in the test, it reproduces what I have 
>> experienced. 
>> 
>> When I check the details on the sequence in postgres, there is no table 
>> owner or column specified by the sequence 'test_user_id_seq'.. and I would 
>> expect to see both tables `a` and `b`.
>> 
>> class IdMixin(object):
>>  id = Column(Integer, Sequence('test_user_id_seq', start=10000), 
>> primary_key=True)
>> 
>> I will write a complete self contained test, that anyone can run. But wanted 
>> to give my immediate feedback.
> 
> oh, you're looking for a linkage in PG's information schema I guess?  
> Sequence() doesn't have that functionality.   My understanding was that PG's 
> SERIAL created the linkage as a "server default", so you can get this by 
> adding this server default yourself, see below for demo:
> 
> from sqlalchemy import *
> from sqlalchemy.orm import *
> from sqlalchemy.ext.declarative import declarative_base, declared_attr
> 
> Base = declarative_base()
> 
> class IdMixin(object):
>    id = Column(Integer,
>                Sequence('some_id_seq', start=10000),
>                server_default=text("nextval('some_id_seq')"),
>                primary_key=True)
> 
> class A(IdMixin, Base):
>    __tablename__ = 'a'
> 
> class B(IdMixin, Base):
>    __tablename__ = 'b'
> 
> e = create_engine("postgresql://scott:tiger@localhost/test", echo=True)
> Base.metadata.drop_all(e)
> Base.metadata.create_all(e)
> 
> sess = Session(e)
> 
> a1 = A()
> sess.add(a1)
> 
> b1 = B()
> sess.add(b1)
> sess.commit()
> 
> assert a1.id == 10000
> assert b1.id == 10001
> 
> sess.execute("INSERT INTO b DEFAULT VALUES")
> assert sess.execute("SELECT * FROM b WHERE id=10002").scalar()
> 
> 
> 
> 
>> 
>> Thanks so much,
>> Mat
>> 
>> 
>> On Jun 26, 2013, at 6:37 PM, Michael Bayer <mike...@zzzcomputing.com> wrote:
>> 
>>> 
>>> On Jun 26, 2013, at 12:02 PM, Mat Mathews <m...@miga.me> wrote:
>>> 
>>>> I would like to do something like this:
>>>> 
>>>> class User(object):
>>>>    id = Column(Integer, Sequence('user_id_seq', start=10000), 
>>>> primary_key=True)
>>>> 
>>>> This does work, and emits the CREATE SEQUENCE, but does not set the owned 
>>>> table or the column to user.id
>>> 
>>> I'm not able to reproduce, even assigning the same sequence name to two 
>>> different tables simultaneously produces the correct result.  Can you 
>>> modify the test below to illustrate your issue?
>>> 
>>> from sqlalchemy import *
>>> from sqlalchemy.orm import *
>>> from sqlalchemy.ext.declarative import declarative_base, declared_attr
>>> 
>>> Base = declarative_base()
>>> 
>>> class IdMixin(object):
>>>  id = Column(Integer, Sequence('user_id_seq', start=10000), 
>>> primary_key=True)
>>> 
>>> class A(IdMixin, Base):
>>>  __tablename__ = 'a'
>>> 
>>> class B(IdMixin, Base):
>>>  __tablename__ = 'b'
>>> 
>>> e = create_engine("postgresql://scott:tiger@localhost/test", echo=True)
>>> Base.metadata.drop_all(e)
>>> Base.metadata.create_all(e)
>>> 
>>> sess = Session(e)
>>> 
>>> a1 = A()
>>> sess.add(a1)
>>> 
>>> b1 = B()
>>> sess.add(b1)
>>> sess.commit()
>>> 
>>> assert a1.id == 10000
>>> assert b1.id == 10001
>>> 
>>> 
>>> -- 
>>> 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/groups/opt_out.
>>> 
>>> 
>> 
>> -- 
>> 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/groups/opt_out.
>> 
>> 
> 
> -- 
> 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/groups/opt_out.
> 
> 

-- 
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/groups/opt_out.


Reply via email to