Ramon Marco L. Navarro
Ramon Marco L. Navarro

Reputation: 584

SQLAlchemy: Omit attribute in INSERT column list

How do I omit a table attribute from being included upon insertion?

I have the following class:

class PurchaseOrder(Base):
    __tablename__ = 'PPurchaseOrder'
    id = Column('PurchaseOrderId', Integer, Sequence('transactions_id_seq'), primary_key = True)
    code = Column(String(50))
    ris_id = Column('RisId', Integer, ForeignKey('BRIS.RisId'))
    creator = Column('CreatedBy', String(256))
    created = Column('CreateDate', DateTime)
    date_needed = Column('DateNeeded', DateTime)
    timestamp = Column('Timestamp', TIMESTAMP)

    supplier_items = AssociationProxy('purchase_order_items', 'supplier_item', creator='SupplierItem')
    purchase_order_items = relationship('PurchaseOrderItem', cascade="all, delete, delete-orphan",
            backref='purchase_order', lazy='joined')

    def __init__(self, code, created, date_needed):
        self.code = code
        self.creator = 'Marco'
        self.created = created
        self.date_needed = date_needed

When trying to add an object, it does the following insert statement:

2011-06-30 22:37:26,953 INFO sqlalchemy.engine.base.Engine INSERT INTO [PPurchaseOrder] (code, [RisId], [CreatedBy], [CreateDate], [DateNeeded], [Timestamp]) OUTPUT inserted.[PurchaseOrderId] VALUES (?, ?, ?, ?, ?, ?)
2011-06-30 22:37:26,953 INFO sqlalchemy.engine.base.Engine ('POF000872008', None, 'Marco', datetime.datetime(2008, 5, 27, 8, 47, 18), datetime.datetime(2008, 5, 28, 15, 48), None)

I want the Timestamp column out so that the insert statement would look like this:

2011-06-30 22:37:26,953 INFO sqlalchemy.engine.base.Engine INSERT INTO [PPurchaseOrder] (code, [RisId], [CreatedBy], [CreateDate], [DateNeeded]) OUTPUT inserted.[PurchaseOrderId] VALUES (?, ?, ?, ?, ?, ?)
2011-06-30 22:37:26,953 INFO sqlalchemy.engine.base.Engine ('POF000872008', None, 'Marco', datetime.datetime(2008, 5, 27, 8, 47, 18), datetime.datetime(2008, 5, 28, 15, 48))

Upvotes: 2

Views: 643

Answers (1)

Maxim Sloyko
Maxim Sloyko

Reputation: 15876

IIRC, providing default or server_default argument will move the value generation to the server side. See here for more

Upvotes: 1

Related Questions