如何解决如何使用从SqlAlchemy创建的临时表CTE进行增补?
使用从SqlAlchemy创建的CTE临时表向上插入SQL表的最佳方法是什么?
我选择SqlAlchemy是因为它可以遍历我的输入数据(从前端)并以此方式创建临时表。我对SQL不太熟悉,所以我不知道其他更有效的方法。
现在已经创建了临时表,我真的不知道如何在我的纯文本SQL查询中使用它。
我知道您可以在ORM中进行upserts,但这似乎非常复杂,我现在想坚持使用纯文本。
是否可以仅使用纯文本SQL从CTE插入数据?
async def update_user_preference(
self,preference_requests: List[PreferenceRequest]
) -> None:
stmts = [
select(
[
cast(literal(r.user_id),Integer).label(
"user_id"
),cast(literal(r.sort_order),Integer).label("sort_order"),cast(literal(r.width),Integer).label("width"),]
)
if idx == 0
else select(
[
literal(r.user_id),literal(r.sort_order),literal(r.width),]
)
for idx,r in enumerate(preference_requests)
]
subquery = union_all(*stmts)
subquery = subquery.cte(name="temp_table")
print(f"@@@@@@@@@@@@@@@@@@ {str(subquery.compile())}") # does not print anything
with self.db_engine.connect() as conn:
sql = text(
"""
UPDATE tblUserPreference
SET
UserId = :user_id,SortOrder = :sort_order,Width = :width
WHERE UserId = :user_id
IF @@ROWCOUNT = 0
INSERT INTO tblUserPreference(
UserId,SortOrder,Width)
values(:user_id,:sort_order,:width)
"""
)
conn.execute(sql)
return
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。