首页 > 解决方案 > SQLAlchemy 核心。值方法不限制插入语句中的列

问题描述

SQLALchemy Core插入表达式文档说:

请注意上面的 INSERT 语句命名了 users 表中的每一列。这可以通过使用 values() 方法来限制,该方法明确地建立 INSERT 的 VALUES 子句:

考虑到这一点,我编写了以下代码片段,它返回了意想不到的结果。

from datetime import datetime
import sqlalchemy
from sqlalchemy import types
from sqlalchemy.dialects import postgresql


metadata = sqlalchemy.MetaData()

users = sqlalchemy.Table(
    "users",
    metadata,
    sqlalchemy.Column(
        "id",
        postgresql.UUID(as_uuid=True),
        default=uuid.uuid4(),
        primary_key=True,
    ),
    sqlalchemy.Column("email", types.String, unique=True, index=True),
    sqlalchemy.Column(
        "created_at",
        types.TIMESTAMP(timezone=True),
        default=datetime.utcnow(),
    ),
    sqlalchemy.Column(
        "updated_at",
        types.TIMESTAMP(timezone=True),
        default=datetime.utcnow(),
        onupdate=datetime.utcnow(),
    ),
)


email = "god@olympus.org"
query = users.insert().values(email=email)

# (Pdb) print(query)
# INSERT INTO users (id, email, created_at, updated_at) VALUES (:id, :email, :created_at, :updated_at)
#
# (Pdb) print(query.compile().params)
# {'id': None, 'email': 'god@olympus.org', 'created_at': None, 'updated_at': None}

我希望查询是INSERT INTO users (email) VALUES (:email)

有什么我想念的吗?

顺便说一句,我正在使用SQLAlchemy==1.3.20

标签: python-3.xsqlalchemy

解决方案


该问题与 SQLAlchemy 无关,而是与encode/databases.

支持 sqlalchemy.Column 中的“默认”参数


推荐阅读