我可以获得 Python sqlite3 模块中准备好的语句生成的原始 SQL 吗?
如果是这样,我该怎么做?
If so, how can I do this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如果是这样,我该怎么做?
If so, how can I do this?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
执行准备好的语句时,不会生成新的 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.
当您创建准备好的语句时,“模板”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?