PyMySQL查询字符串生成器

时间:2019-11-14 17:17:02

标签: python mysql pymysql

所以我正在使用PyMySQL包查询远程数据库,并且发现不得不使用.execute()方法非常烦人。

我正在寻找一个包装器,该包装器将能够以更友好的方式构造原始MySQL查询。有谁知道一个可以做到这一点的软件包?

我尝试使用pypika,但是它正在构建的查询(“ SELECT“ id”,“ username”从“ 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))

2 个答案:

答案 0 :(得分:1)

似乎正在使用双引号作为标识符定界符来生成查询。

但是MySQL使用反引号作为默认的标识符定界符,因此查询应如下所示:

SELECT `id`,`username` FROM `users`

您可以将MySQL配置为使用双引号,这是符合ANSI SQL标准的正确标识符分隔符。为此,您必须更改sql_mode以包括模式ANSIANSI_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网站,文档非常稀疏。但是显然MySQLQuery有一个类将其自己的QUOTE_CHAR设置为`,这正是我所期望的。

您是否使用了适用于MySQL的正确查询生成器?

答案 1 :(得分:0)

您可以使用peewee一个简单的小型ORM。 http://docs.peewee-orm.com/en/latest/peewee/quickstart.html#quickstart