因此,我使用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))发布于 2019-11-15 01:38:35
它看起来像是在生成一个使用双引号作为标识符分隔符的查询。
但是MySQL使用反记号作为默认的标识符分隔符,因此查询应该如下所示:
SELECT `id`,`username` FROM `users`您可以将MySQL配置为使用双引号,这是符合ANSI SQL标准的正确标识符分隔符。为此,您必须更改sql_mode以包括模式ANSI或ANSI_QUOTES。
有关sql_mode行为的完整文档,请阅读https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html;有关标识符分隔符的文档,请阅读https://dev.mysql.com/doc/refman/8.0/en/identifiers.html。
我搜索了pypika网站,文档非常稀少。但是显然有一个用于MySQLQuery的类将自己的QUOTE_CHAR设置为`,这正是我所期望的。
您是否正在为MySQL使用正确的查询构建器?
发布于 2019-11-15 01:26:38
您可以使用ORM一种简单而小型的peewee。http://docs.peewee-orm.com/en/latest/peewee/quickstart.html#quickstart
https://stackoverflow.com/questions/58862405
复制相似问题