gpt4 book ai didi

python - cx_Oracle 数据库清理过度减慢查询

转载 作者:行者123 更新时间:2023-12-01 01:04:03 26 4
gpt4 key购买 nike

我正在使用 web.py 从 Oracle 创建一个简单的报告页面。当我采用使用 vars= 传递参数的最佳实践方法时,延迟为 11-12 秒。当我使用字符串替换执行相同的查询时,查询会在不到一秒的时间内运行。这是我检查的方式:

sql = """
SELECT a, b, c
FROM my_table
WHERE what = $what
ORDER BY a, b"""

print('before', datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S'))

result = db.query(sql, vars={'what': '1234'})

print('after', datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S'))

“之前”和“之后”显示得比我在查询上遇到的大量延迟要清楚。我已经尝试使用具有相同 vars= 的 select() 并且得到相同的延迟。所以,我最初的建议是 web.db 的 SQL 转义函数造成了延迟。我不想传递未转义的输入,而且似乎不应该有这么多开销。

还有什么可能造成这种延迟吗?如果是转义逻辑,是否有任何我需要注意的问题?

提前致谢!

编辑:

在进一步调查中,我已经证明(至少对我自己而言)延迟并非特定于 web.py,而是发生在 cx_Oracle 中。我得出了这个结论,修改了我的 sql 语法并做:
cursor = db._db_cursor()

lines = cursor.execute(sql.format(my_table, {'what': '1234'})

...与对变量进行硬编码相比,这会产生类似的 10 到 12 秒延迟。任何 cx_Oracle 建议?

最佳答案

好吧。在进一步的进一步调查中,我发现问题是 Python 和 Oracle 之间对于我传递的字符串参数的编码不匹配。用一个简单的 what.encode('iso-8859-1') 修复它。如果这对您不起作用,请使用 PL/SQL dump() 函数检查 Oracle 编码。如果 Python 编码不起作用,请先尝试解码。

关于python - cx_Oracle 数据库清理过度减慢查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20434075/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com