Ядро SQLAlchemy. Метод Values не ограничивает столбцы в инструкции insert

#python-3.x #sqlalchemy

#python-3.x #sqlalchemy

Вопрос:

В документации SQLAlchemy Core insert expressions говорится:

Обратите внимание выше, что инструкция INSERT присваивает имена каждому столбцу в таблице users . Это может быть ограничено с помощью метода values(), который явно устанавливает предложение VALUES для INSERT:

Имея это в виду, я написал следующий фрагмент, который возвращает неожиданные результаты.

 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 Кстати, я использую.

Ответ №1:

Проблема связана не с SQLAlchemy, а с encode/databases .

Поддержка параметра «по умолчанию» в sqlalchemy.Столбец