[英]Bulk update in SQLAlchemy with python databases.Database
我有 postgres 數據方案:
table_tools = sqlalchemy.Table(
settings.sql_tool_table_name,
metadata,
sqlalchemy.Column('id', UUID,
primary_key=True,
server_default=sqlalchemy.text(
"uuid_generate_v4()"),
index=True),
Column('article', sqlalchemy.String(50), nullable=True),
Column('title', sqlalchemy.String, nullable=False),
Column('base_title', sqlalchemy.String, nullable=False,
index=True),
Column('maker', sqlalchemy.String(50), nullable=False),
Column('description', sqlalchemy.String, nullable=True),
Column('price', sqlalchemy.Float),
Column('currency', sqlalchemy.String(5)),
Column('created_at', sqlalchemy.DateTime(timezone=True),
default=func.now()),
Column('updated_at',
sqlalchemy.DateTime(timezone=True), default=func.now(),
onupdate=func.now()),
UniqueConstraint('base_title', 'maker',
name='unique_base_title_maker')
)
我在這個項目中使用迂腐的過渡模型。 我想使用 bulk_update 方法按 id 更新數據,如下所示:
async def update_tool_bulk(self, tools: list[ToolIn]):
tools_load = []
for tool in tools:
tool_db: Record = await self.get_tool(tool.title, tool.maker)
tool_id: UUID = dict(**tool_db).get('id')
tool_upd = ToolInFull(**tool.dict())
tools_load.append({'_id': tool_id} | tool_upd.dict())
self.table_tools.update()
query = self.table_tools.update(
self.table_tools.columns.id == bindparam('_id')).values({
'article': bindparam('article'),
'title': bindparam('title'),
'base_title': bindparam('base_title'),
'maker': bindparam('maker'),
'description': bindparam('description'),
'price': bindparam('price'),
'currency': bindparam('currency')
})
await self.database.execute_many(query=query, values=tools_load)
執行此代碼時,出現錯誤:
未使用的列名:_id
如果我用“id”替換“_id”參數,我會得到一個錯誤:
綁定參數“id”與同名的唯一綁定參數沖突
告訴我,我做錯了什么?
我解決了這個問題 - 有必要轉換為查詢字符串:self.database.execute_many(query=str(query), values=tools_load)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.