首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyMySQL查询字符串生成器

PyMySQL查询字符串生成器
EN

Stack Overflow用户
提问于 2019-11-15 01:17:02
回答 2查看 737关注 0票数 2

因此,我使用PyMySQL包来查询远程数据库,并且我发现必须使用.execute()方法非常烦人。

我正在寻找一个包装器,将能够以一种更友好的方式构建原始MySQL查询。有没有人知道有什么包可以做到这一点?

我尝试过使用pypika,但它正在构建的查询('SELECT "id","username“FROM "users"')抛出一个错误

代码语言:javascript
复制
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:这是我在遇到上述错误时使用的代码

代码语言:javascript
复制
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))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-15 01:38:35

它看起来像是在生成一个使用双引号作为标识符分隔符的查询。

但是MySQL使用反记号作为默认的标识符分隔符,因此查询应该如下所示:

代码语言:javascript
复制
SELECT `id`,`username` FROM `users`

您可以将MySQL配置为使用双引号,这是符合ANSI SQL标准的正确标识符分隔符。为此,您必须更改sql_mode以包括模式ANSIANSI_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使用正确的查询构建器?

票数 1
EN

Stack Overflow用户

发布于 2019-11-15 01:26:38

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58862405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档