python - 使用 SQLAlchemy 和 Python 执行 SQL CTE
问题描述
我在主程序中有以下代码:
cleanDuplicatesAttendeesSQL = attendees.clean_duplicates()
sqlUtilities.databaseWorkerExecute(cleanDuplicatesAttendeesSQL)
attendees.clean_duplicates()
设置变量cleanDuplicatesAttendeesSQL
:
def clean_duplicates():
return """
WITH cte AS(
SELECT [Sessions]
,[Confirmation #]
,[First Name]
,[Last Name]
,ROW_NUMBER() OVER (
PARTITION BY
[Sessions]
,[Confirmation #]
,[First Name]
,[Last Name]
ORDER BY
[Sessions]
,[Confirmation #]
,[First Name]
,[Last Name]
) row_num
FROM attendees
)
DELETE FROM cte
WHERE row_num > 1"""
然后我传递cleanDuplicatesAttendeesSQL
给以下函数以对数据库执行:
def databaseWorkerExecute (sql):
engine = sqlalchemy_connect()
try:
engine.execute(sql)
print("Execution successful.")
except SQLAlchemyError as e:
error = str(e.__dict__['orig'])
print (error)
sys.exit("Execution was not sucessful. Exiting the program...")
这个函数不会出错,每次我都会得到一个“执行成功”。但是,当我查看数据库中的表时,我仍然看到重复项。我成功地使用相同databaseWorkerExecute
的功能来执行其他操作,例如更新、插入和删除。我怎样才能让 CTE 也能正常工作?
SQL输出截图:
解决方案
推荐阅读
- ios - 在什么情况下会出现单元测试在 View 完全加载之前运行的情况?
- angular - 错误的打包库 - Angular 自定义库 - NPM
- python - 通过 Python 在 Internet 上在 QNAP NAS 上创建文件夹的最佳方法
- javascript - POST 期间控制台中的 FormData() 对象为空
- flutter - 未调用 Dart 方法
- ruby-on-rails - 有没有办法验证用什么参数调用 new
- ios - ARKit - 如何从当前相机位置获取 z 距离
- r - 如何在 read_excel 路径 Rstudio 中包含字符串向量或 sys.date() 介绍?
- html - 无法用我的导航栏填充窗口的高度
- reactjs - 使用现有搜索栏实现 Google Places 自动完成