#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
.