python-3.x - 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
。
解决方案
该问题与 SQLAlchemy 无关,而是与encode/databases
.