Ale*_*nov 3 python orm sqlalchemy
我正在使用sqlalchemy==1.1.4. 我完全陷入了尝试为insert从DeclarativeMeta类继承的模型执行多值的过程中。我有下一个声明:
import sqlalchemy as sa
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class SomeClass(Base):
id = sa.Column(sa.String(length=64), primary_key=True,
default=lambda: str(uuid4()))
is_active = sa.Column(sa.Boolean, default=True)
service_id = sa.Column(sa.String(length=100), nullable=False)
order = sa.Column(sa.SmallInteger, default=0)
Run Code Online (Sandbox Code Playgroud)
当我尝试多值插入时:
con.execute(
sa.insert(SomeClass).values([
{SomeClass.service_id: '12'},
{SomeClass.service_id: '34'},
])
)
Run Code Online (Sandbox Code Playgroud)
它抛出
sqlalchemy.exc.CompileError: INSERT value for column SomeClass.service_id is
explicitly rendered as a boundparameter in the VALUES clause; a
Python-side value or SQL expression is required
Run Code Online (Sandbox Code Playgroud)
根据 Michael Bayer 的帖子链接,无论如何我的代码似乎是正确的,但它甚至没有编译为 sql 表达式。虽然下一个完美地工作:
con.execute(
sa.insert(SomeClass).values([
{SomeClass.service_id.key: '12'},
{SomeClass.service_id.key: '34'},
])
)
Run Code Online (Sandbox Code Playgroud)
有人知道这是什么鬼吗?)
只有当您传递给的元素列表insert.values()包含不一致的键时,才会发生该错误,这意味着您可能有一个类似的列表:[{'name': 'foo', code:'foo'}, {'name': 'bar'}]
| 归档时间: |
|
| 查看次数: |
1101 次 |
| 最近记录: |