我可以获得 Python sqlite3 模块中准备好的语句生成的原始 SQL 吗?

发布于 2024-08-31 17:43:37 字数 19 浏览 4 评论 0原文

如果是这样,我该怎么做?

If so, how can I do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

山川志 2024-09-07 17:43:37

执行准备好的语句时,不会生成新的 SQL。
准备好的语句的想法是 SQL 查询及其数据是单独传输的(这就是为什么您不必转义任何参数) - 查询很可能只在准备后以优化的形式存储。

When executing a prepared statement, no new SQL is generated.
The idea of prepared statements is that the SQL query and its data are transmitted separately (that's why you don't have to escape any arguments) - the query is most likely only stored in an optimized form after preparing it.

辞别 2024-09-07 17:43:37

当您创建准备好的语句时,“模板”SQL 代码已发送到 DBMS,DBMS 将其编译成表达式树。当您传递值时,相应的库(在您的情况下为 python sqlite3 模块)不会将值合并到语句中。 DBMS 可以。

如果您仍想生成普通的 SQL 字符串,可以使用字符串替换函数将占位符替换为值(转义后)。

你需要这个做什么?

when you create a prepared statement, the "template" SQL code is sent to the DBMS already, which compiles it into an expression tree. When you pass the values, the corresponding library (python sqlite3 module in your case) doesn't merge the values into the statement. The DBMS does.

If you still want to produce a normal SQL string, you can use string replace functions to replace the placeholders by the values (after escaping them).

What do you need this for?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文