0
mixinパターンがDRYに便利ですが、シーケンスに問題があります。注、私はポストグルを使用しています。Sqlalchemy + Postgres:シーケンス付き合成/人工idミックスイン
私はアレムビアのマイグレーションを使用していますが、私はthis might not be possible right nowを理解していますが、--autogeneration
がこのシーケンスで動作することを本当に欲しいと思います。しかし、それはORM識別子なしでシーケンスを設定するように見えますが、ダウングレードを実行したい場合は、シーケンスが後で削除されるのを防ぎます。
グーグルでは、some explanation on how to properly setup a sequenceが見つかりました。基本的には、idとそのシーケンスを区切ります。
現在のコードは、ビットのようになります。上記のコード、私は非有用なエラーで終了して
import sqlalchemy as sa
from sqlalchemy.ext.declarative import declared_attr
class AutoIdMixin(object):
"""Generates an synthetic identifier primary key.
"""
# See: http://docs.sqlalchemy.org/en/latest/core/defaults.html#associating-a-sequence-as-the-server-side-default
@declared_attr
def id_seq(cls):
bases = cls.__bases__
Base = bases[0]
sequence_prefix = 'seq'
schema = cls._schema_name
sequence_id = '_'.join((sequence_prefix, schema, cls.__tablename__, 'id'))
sequence = sa.Sequence(sequence_id, 1, 1, metadata=Base.metadata)
return sequence
@declared_attr
def id(cls):
column_id = sa.Column(sa.types.Integer, cls.id_seq.next_value(), primary_key=True)
return column_id
:RTM瞬間に
AttributeError: Neither 'next_value' object nor 'Comparator' object has an attribute '_set_parent_with_dispatch'