SQLAlchemy“默认”与“server_default”性能

在将 SQLAlchemy 与 PostgreSQL 一起使用时,使用default而不是server_default映射表列默认值是否有性能优势(或劣势)?


我的理解是default在INSERT(通常)中呈现表达式server_default并将表达式置于CREATE TABLE语句中。似乎server_default类似于直接在数据库中对默认值的典型处理,例如:


CREATE TABLE example (

    id serial PRIMARY KEY,

    updated timestamptz DEFAULT now()

);

...但我不清楚在INSERT表创建时或通过表创建处理默认值是否更有效。


如果default将下面示例中的每个参数更改为,行插入的性能是否会提高或降低server_default?


from uuid import uuid4

from sqlalchemy import Column, Boolean, DateTime, Integer

from sqlalchemy.dialects.postgresql import UUID

from sqlalchemy.ext.declarative import declarative_base

from sqlalchemy.sql import func


Base = declarative_base()


class Item(Base):

    __tablename__ = 'item'


    id = Column(UUID(as_uuid=True), primary_key=True, default=uuid4)

    count = Column(Integer, nullable=False, default=0)

    flag = Column(Boolean, nullable=False, default=False)

    updated = Column(DateTime(timezone=True), nullable=False, default=func.now())

注意:到目前为止,我找到的关于何时使用default而不是使用的最佳解释server_default并没有解决性能问题(请参阅 Mike Bayer 关于该主题的 SO 答案)。我对该解释的过于简化的总结是,default它比server_default...


db 无法处理您需要或想要用于默认值的表达式。

您不能或不想直接修改架构。

...所以问题仍然是在default和之间进行选择时是否应该考虑性能server_default?


炎炎设计
浏览 214回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python