在将 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?
相关分类