Python/Mysql:拒绝转义字符串!

发布于 2024-11-14 11:06:42 字数 350 浏览 1 评论 0原文

我需要执行一个很长的查询,并且我正在使用准备好的语句将值插入到查询中。据我所知,它应该有效,但它不起作用!

这是代码:

    cursor = connection.cursor()
    rows = cursor.execute(r"""SELECT... %s.. %s.. %s...""",(val1,val2,val3,))
    rows = cursor.fetchall()
    rows = text_position(rows)

如果我插入一个简单的引号,它就会中断,如果我插入任何非英语字符,也会发生同样的情况。它与双引号一起使用,因为我将语句括在其中。有什么建议吗?

I have a pretty long query i need to execute, and i'm using prepared statements to insert the values to the query. As far as i know, it's suppose to work, but it's not working!

Here's the code:

    cursor = connection.cursor()
    rows = cursor.execute(r"""SELECT... %s.. %s.. %s...""",(val1,val2,val3,))
    rows = cursor.fetchall()
    rows = text_position(rows)

If i insert a simple-quote it breaks, and same thing if i insert any non-english characters. It works with double-quotes as i wrapped the statement in them. Any suggestions?

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

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

发布评论

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

评论(1

神回复 2024-11-21 11:06:42

这是调试 SQL 的通用技术(尤其是从另一种语言(例如 Python)生成时):

停止 mysql 服务器(假设您在没有日志记录的情况下运行 mysqld):

sudo invoke-rc.d mysql stop

在打开日志记录的情况下运行 mysqld:

sudo mysqld --log=/tmp/myquery.log

运行脚本。

在 /tmp/myquery.log 中查找 MySQLdb 发送到 mysqld 的 SQL 命令。

这可能会给你足够的线索来解决问题,否则,请发布Python中的完整SQL命令

cursor.execute(r"""SELECT... %s.. %s.. %s...""",(val1,val2,val3,))

以及mysqld在/tmp/myquery.log中看到的相应SQL。

完成调试后,您可以关闭日志记录 mysqld 并重新启动它:

sudo invoke-rc.d mysql restart

This is a general technique for debugging SQL (especially when generated from another language, like Python):

Stop the mysql server (assuming you run mysqld without logging):

sudo invoke-rc.d mysql stop

Run mysqld with logging turned on:

sudo mysqld --log=/tmp/myquery.log

Run your script.

Look in /tmp/myquery.log for the SQL command that MySQLdb sent to mysqld.

This might give you enough of a clue to solve the problem, otherwise, please post the complete SQL command in Python

cursor.execute(r"""SELECT... %s.. %s.. %s...""",(val1,val2,val3,))

and the corresponding SQL as seen by mysqld in /tmp/myquery.log.

Once you are done debugging, you can shutdown the logging mysqld and restart it with:

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