因此,我正在使用PyMySQL包查询远程数据库,并且发现不得不使用.execute()方法非常烦人。
我正在寻找一种包装器,该包装器将能够以更友好的方式构造原始MySQL查询。有谁知道一个可以做到这一点的软件包?
我尝试使用pypika,但是它正在构建的查询(“ SELECT“ id”,“ username” FROM“ users”')引发错误
pymysql.err.ProgrammingError: (1064, '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 '"users"' at line 1')
编辑:这是一个远程数据库,我无法控制结构方式,并且结构可能会更改,所以我认为我不能使用SQLAlchemy
编辑2:这是我遇到上述错误时使用的代码
from pypika import Query, Table, Field import pymysql users = Table('users') q = Query.from_(users).select(users.id, users.username) db = pymysql.connect(host=host, port=3306, user=user, passwd=password, db=db, cursorclass=pymysql.cursors.DictCursor) db.execute(str(q))
问题来源于stack overflow
看起来它正在使用双引号作为标识符定界符来生成查询。
但是MySQL使用反引号作为默认的标识符定界符,因此查询应如下所示:
SELECT id
,username
FROM users
您可以将MySQL配置为使用双引号,这是符合ANSI SQL标准的正确标识符分隔符。为此,您必须更改sql_mode使其包含模式ANSI或ANSI_QUOTES。
阅读https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html以获得有关sql_mode行为的完整文档,以及https://dev.mysql.com/doc/refman/8.0/en/ identifiers.html,以获取有关标识符定界符的文档。
我搜索了pypika网站,文档非常稀疏。但是显然有一个用于MySQLQueryBuilder将其自己的QUOTE_CHAR设置为` 的类,这正是我所期望的。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。