【问题标题】:python peewee raw query without escaping characters没有转义字符的python peewee原始查询
【发布时间】:2018-09-05 10:36:27
【问题描述】:

有什么方法可以防止在 python peewee (peewee-2.8.8) ORM 中转义反斜杠?

我想在 MySQL 数据库中执行查询:

SHOW MASTER STATUS\G

“\G”部分是必不可少的!我需要垂直形式的结果。

问题在于 peewee 总是转义反斜杠 (\) 所以它在 MySQL 中结束为:

SHOW MASTER STATUS\\G

当然 MySQL 会发出错误:

 "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\\G' at line 1"

我尝试使用普通的“execute_sql”方法:

cursor = RaDatabase.execute_sql('SHOW MASTER STATUS\G')

还有“原始”方法:

query = BaseModel.raw('SHOW MASTER STATUS\G')
result = query.execute()

但都以转义字符结尾。

【问题讨论】:

    标签: python mysql peewee


    【解决方案1】:

    您是否尝试过使用“原始”字符串?

    cursor = RaDatabase.execute_sql(r'SHOW MASTER STATUS\G')
    

    对于它的价值,您传递给 .execute_sql() 的任何内容本质上都会移交给 MySQL 驱动程序(pymysql 或您正在使用的任何内容)。 Peewee 本身不会进行任何转义。

    【讨论】:

    • 感谢您的提示。不幸的是,它也没有工作:) 但是你是对的,peewee 没有做任何转义。我做了一些网络嗅探,并且查询完全按照 peewee 得到的发送。我只是误解了“\G”选项——它不是 MySQL 数据库引擎选项,它是 mysql 客户端程序的选项。当 mysql 客户端看到“\G”选项时,它会向 MySQL db 发送“正常”查询,但格式(内部)结果是垂直的。所以我的解决方案是将简单的“SHOW MASTER STATUS”发送到 MySQL db,并将光标的结果格式化为垂直呈现。顺便说一句,非常感谢你的 peewee!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 2021-09-13
    • 2021-09-08
    • 2012-06-19
    相关资源
    最近更新 更多