On Feb 14, 2011, at 2:00 AM, Andrey Gladilin wrote:

> Thanks Michael for your answer. Shame on me, that I did not find this
> point in documentation.
> 
> But such behaviour seems strange to me. Why should I specify these
> parameters in anchestors, specify anchestors in a child class and then
> explicitly describe my arguments once more in a child class? I would
> prefer if __mapper_args__ would be merged automatically in the
> standard inheritance order.

we might pursue that as a feature in a future release.   for now we chose not 
to make any assumptions about which __mapper_args__ and/or __table_args__ from 
where people would want combined.   If we made it automatic, the user would 
then have no control, including any way to work around mistaken assumptions 
we've made.    Its not very different from the fact that an __init__() method 
needs to explicitly call the __init__() of the superclass.



> 
> 
> On 13 фев, 23:30, Michael Bayer <mike...@zzzcomputing.com> wrote:
>> On Feb 13, 2011, at 1:39 PM, Andrey Gladilin wrote:
>> 
>> 
>> 
>>> I am trying to create a version column which would use values from a
>>> single postgresql sequence.
>> 
>>> record_versions_id_seq = Sequence('record_versions_id_seq')
>> 
>>> class TimestampMixin(object):
>>>    created_at = Column(DateTime, default=func.now())
>>>    record_version = Column(Integer, nullable=False,
>>> default=func.nextval("record_versions_id_seq"))
>> 
>>>    __mapper_args__ = {
>>>        'version_id_col': record_version,
>>>        'version_id_generator': lambda v:
>>> func.nextval("record_versions_id_seq")
>>>    }
>> 
>>> class Team(Base, NameMixin, TimestampMixin):
>>>    __tablename__ = 'teams'
>>>    id = Column(Integer, primary_key=True)
>> 
>>> There are other tables like Team inheriting TimestampMixin. And here I
>>> have two problems:
>> 
>>> 1. Decribed code does not work for update. I.e when I update the
>>> record from Team, the record_version column value is not getting
>>> changed. So to workaround this problem I have to explicitly specify
>>> __mapper_args__ in Team class.
>> 
>> if Base or NameMixin is also modifying __mapper_args__, those will override 
>> what TimestampMixin returns.   The __mapper_args__ from different mixins 
>> need to be combined manually for the final product.  Some background 
>> athttp://www.sqlalchemy.org/docs/orm/extensions/declarative.html#combin...
>> 
>>> 2. Code lambda v: func.nextval("record_versions_id_seq") does not
>>> work. I guess this code is incorrect, so could you help me to create a
>>> correct one please?
>> 
>> you'd need to execute the function through a connection, and you can use the 
>> Sequence object directly:
>> 
>>         lambda v: some_engine.execute(record_versions_id_seq)
> 
> -- 
> 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 
> sqlalchemy+unsubscr...@googlegroups.com.
> For more options, visit this group at 
> http://groups.google.com/group/sqlalchemy?hl=en.
> 

-- 
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 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to