所以我正在使用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))
答案 0 :(得分:1)
似乎正在使用双引号作为标识符定界符来生成查询。
但是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网站,文档非常稀疏。但是显然MySQLQuery
有一个类将其自己的QUOTE_CHAR设置为`,这正是我所期望的。
您是否使用了适用于MySQL的正确查询生成器?
答案 1 :(得分:0)
您可以使用peewee
一个简单的小型ORM。
http://docs.peewee-orm.com/en/latest/peewee/quickstart.html#quickstart