在Python中解析SQL查询

2023-12-27

我需要在 python 中构建一个迷你 sql 引擎。所以我需要一个 sql-parser,并且我发现了 python-sqlparse,但无法理解如何从 SQL 查询中提取列名或表名等。有人可以帮我解决这个问题吗?


让我们检查 python sqlparse 文档:文档 - 入门 https://sqlparse.readthedocs.io/en/latest/intro/#getting-started

您可以看到如何解析 sql 的示例。这就是那里的东西:

1.首先需要使用parse方法解析sql语句:

sql = 'select * from "someschema"."mytable" where id = 1'
parsed = sqlparse.parse(sql)

2. 现在您需要从解析中获取 Statement 对象:

stmt = parsed[0]
    '''(<DML 'select' at 0x9b63c34>,
 <Whitespace ' ' at 0x9b63e8c>,
 <Operator '*' at 0x9b63e64>,
 <Whitespace ' ' at 0x9b63c5c>,
 <Keyword 'from' at 0x9b63c84>,
 <Whitespace ' ' at 0x9b63cd4>,
 <Identifier '"somes...' at 0x9b5c62c>,
 <Whitespace ' ' at 0x9b63f04>,
 <Where 'where ...' at 0x9b5caac>)'''

3.然后你可以用str()方法再次读取解析后的sql语句:

#all sql statement
str(stmt)
#only parts of sql statements
str(stmt.tokens[-1])
#so the result of last str() method is 'where id = 1'

的结果str(stmt.tokens[-1])那么就是'where id = 1'

如果你想要表的名称,你只需要写:

str(stmt.tokens[-3])
#result "someschema"."mytable"

如果您需要列的名称,可以调用:

str(stmt.tokens[2])
#result *, now it is operator * because there are not columns in this sql statements
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在Python中解析SQL查询 的相关文章

  • Python sqlite3参数化删除表

    我在 python 中删除 sqlite3 表时遇到问题 我正在使用标准sqlite3模块 self conn sqlite3 connect sql drop table self conn execute sql u table nam
  • 我应该为 MySQL 使用什么 python 3 库? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 据我所知 MySQLdb 仍然没有移植到 Python 3 pypy 上似乎有另一个名为 PyMySQL
  • 在 Python 中绘制分类数据的三个维度

    我的数据包含三个我试图可视化的分类变量 城市 五个之一 职业 四种之一 血型 四种之一 到目前为止 我已经成功地以一种我认为易于使用的方式对数据进行了分组 import numpy as np pandas as pd Make data
  • 小数缓存是Python规范中定义的还是一个实现细节?

    Python 似乎有一个所谓的 小数字缓存 用于存储 5 到 256 范围内的数字 我们可以使用以下程序来演示这一点 for i in range 7 258 if id i id i 0 print i is cached else pr
  • 如何从 Lua 调用 Python 函数?

    我想从我的 lua 文件运行 python 脚本 我怎样才能实现这个目标 Example Python代码 sum py file def sum from python a b return a b Lua code main lua f
  • SQL Server:比较两个表中的列

    我最近完成了从某些应用程序的旧版本到当前版本的迁移 在迁移数据库时遇到了一些问题 我需要一个可以帮助我比较两个表中的列的查询 我的意思不是行中的数据 我需要比较列本身来弄清楚我错过了表结构的哪些变化 看一下红门 SQL 比较 http ww
  • Windows Defender 检测 Python EXE 为木马

    我制作了一个 Python 脚本 将 Windows 目录以 zip 形式邮寄给我 我使用 sched 模块添加了一个调度程序 每小时重复一次 我试图制作一个简单的同步应用程序供个人使用 在 Windows 启动时启动 我使用将其转换为 e
  • python 脚本中 os.system 的 256 和 512 响应代码是什么

    当我在 python 中使用 os system ping 服务器时 我得到多个响应代码 使用的命令 os system ping q c 30 s SERVERANME 0 在线 256 离线 512 512 是什么意思 Per the
  • 简单的t-sql而不是触发器

    任何人都可以帮助解决简单的 t sql 脚本与板载触发器的问题吗 我使用非常简单的触发器将数据从一个表复制到另一个表 这些表之间没有关系 当我尝试在触发器创建后 从同一脚本 直接第一次插入数据时 我得到了所需的结果 但所有接下来的尝试都会失
  • 读取文件特定行号的有效方法。 (奖励:Python 手册印刷错误)

    我有一个 100 GB 的文本文件 它是来自数据库的 BCP 转储 当我尝试导入它时BULK INSERT 我在第 219506324 行上收到一个神秘错误 在解决此问题之前 我想看看这一行 但可惜的是我最喜欢的方法 import line
  • 使用 python 只读取 Excel 中的可见行

    我想只读取 python 中 Excel 工作表中的可见行 输入 Excel表 所以当我过滤时 作为 python 中的输出 在本例中我将仅获得可见数据 1 行 这是我的代码 from openpyxl import load workbo
  • 计算行数并仅获取表中的最后一行

    我有一张桌子叫employeexam其结构和数据是这样的 id course id employee id degree date 1 1 3 8 2013 01 14 2 2 4 15 2013 01 14 3 2 4 17 2013 0
  • 如何删除 pandas 数据框中的唯一行?

    我遇到了一个看似简单的问题 在 pandas 数据框中删除唯一的行 基本上 相反drop duplicates https pandas pydata org pandas docs stable generated pandas Data
  • 根据 SQL 查询的集合生成成员的“散点图”结果

    我有一个staff包含工作人员的数据库表 其中user no and user name列 我还有一个 department 包含员工可以加入的部门的表 其中dept no and dept name作为列 因为员工可以是多个部门的成员 所
  • 在python中安装scipy模块时出错

    我正在尝试使用 pip 在 python 中安装 scipy 模块 它显示以下错误 Command c users sony appdata local programs python python35 32 python exe u c
  • 如何限制scrapy请求对象?

    所以我有一个蜘蛛 我认为它正在泄漏内存 结果当我检查 telnet 控制台 gt gt gt prefs 时 它只是从链接丰富的页面中抓取了太多链接 有时它会超过 100 000 个 现在我已经一遍又一遍地浏览文档和谷歌 但我找不到一种方法
  • Matplotlib 中的 TwoSlopeNorm 未按预期工作

    我正在尝试创建一个具有发散颜色图的绘图 该颜色图在零附近不对称 In this https stackoverflow com a 20146989 6288682例如 DivergingNorm函数被使用并产生我想要的 然而 我使用的是更
  • 在至少 7 天内连续三天登录该产品的用户

    我有一个用于用户参与的数据框 df 如下所示 time stamp user id 2013 01 01 10 05 23 1 2013 01 03 16 35 23 1 2013 01 06 11 06 35 1 2013 01 10 1
  • 通过 ManyToManyField = Value 对 django 查询集进行排序

    如果有一些模型 例如 class Tag models Model name models CharField class Thing models Model title models CharField tags models Many
  • django admin 中内联模型的分页器

    我有这个简单的 django 模型 由一个传感器和特定传感器的值组成 每个日射强度计的值数量很多 gt 30k 是否可以以某种方式分页PyranometerValues在特定日期或一般情况下将分页器应用于管理内联视图 class Pyran

随机推荐

  • Pandas `agg` 列出,“AttributeError / ValueError:函数不减少”

    很多时候我们表演的时候groupby使用 pandas 进行操作时 我们可能希望在多个系列中应用多个函数 groupby agg https pandas pydata org pandas docs stable generated pa
  • 如何禁用点击但仍允许在 iframe 中滚动?

    我的页面上显示了一个固定高度的面板中的 iframe 但 iframe 中呈现的页面要大得多 我不希望用户能够单击 iframe 中的任何内容 我知道对此的一般解决方案是在 iframe 顶部放置一个不可见的 div 来禁用所有交互 但是
  • 如何获取 Objective-C 字典中每个键的值?

    我正在维护一个NSMutableDictionary它保存键和值对 现在我需要对其中的每个值执行一些操作 如何从字典中检索值 this is NSMutableDIctionary NSMutableDictionary dictobj N
  • 如何在 Perl 中引用列表?

    我读到scalars arrays and list 我不确定是什么意思list 例如 5 apple x 3 14 is a list 但是实际引用列表的变量是什么 列表只是初始化数组的一种方式还是已知的数据结构 如何在 Perl 中引用
  • 如何从构建到发布管道获取TFS/AzureDevOps中的变量值?

    我在 TFS AzureDevops Build 定义中定义了一个变量 假设它是time 并在我的构建定义中使用 PowerShell 任务分配值 Like Type 内联脚本 内联脚本 date Get Date Format g Wri
  • 在Delphi中连接Mysql数据库的最佳方式是什么

    在 Delphi 中连接到 Mysql 5 1 x 时最好使用什么组件 为什么 没有其他数据库组件可以击败 DevArt DB 组件 他们有MyDac http www devart com mydac and UniDac http ww
  • 如果编译器兼容 Cpp0x,#define 是什么?

    当编译器符合 Cpp0x 时 是否有任何官方或非官方的 defines 更好的是 对于特定的 Cpp0x 功能 cpp0xlambda cpp0xrvalue 等 网上没找到这方面的资料 对于根据 16 8 1 的 C 03 预定义宏名称
  • Facebook iframe 无法在 IE 中运行;会话/登录问题?

    我的 Facebook canvas iframe 应用程序有问题 我正在使用会话来构建一个简单的问卷式应用程序 每页上都有一个问题 提交表单时答案将存储在会话数组中 并且页码会加一 然后显示下一个问题 简单的东西 然而 这个应用程序 适用
  • 为 GWT Comet 使用大气

    我正在寻找一个简单的框架来为我的 GWT 应用程序实现 Comet 我查看了似乎不活跃的 gwt rocket 然后查看了不活跃的 gwt comet 然后查看了已移入大气项目的atmosphere gwt comet 最后 尝试从大气中实
  • nextjs 用于身份验证的路由中间件

    我正在尝试找出一种适当的身份验证方法 我知道这是一个敏感的话题GitHub 问题页面 https github com zeit next js issues 153 我的身份验证很简单 我在会话中存储 JWT 令牌 我将其发送到不同的服务
  • 如何将参数从外部汇编器子例程传递回 cobol 程序?

    我试图从用汇编程序编写的外部子例程传回参数 调用例程是在 cobol 中 外部汇编例程的参数如下所示 01 CALCSHRS PARMS 05 CS DEPOSIT AMT PIC 9 5 V99 COMP 3 05 CS SHARE PR
  • 将多个数据合并为一个数据

    我有这样的数据 CCSKIYEARDOULE CCSKIYEAR 92 93 92 92 93 93 94 95 94 94 95 95 96 97 97 但我想要这样的输出 CCSKIYEARDOULE CCSKIYEAR 92 93 9
  • 使用远程验证进行多字段验证

    我有以下模型 public class Customer public string FirstName get set public string LastName get set Remote CardExisting Validati
  • 如何使用 O(n) 时间和 O(1) 空间成本就地合并两个排序整数数组

    例如 给定一个整数数组及其两个连续序列的开始位置 即 b1 和 b2 此外还提供了位置 last 该位置指示第二个序列的结束位置 从数组 b1 到数组 b2 1 和从数组 b2 到数组 last 都是分开的顺序 如何将它们合并到位使用 O
  • 使用python将某个网站的HTML保存在txt文件中

    我需要将任何网站的 HTML 代码保存在 txt 文件中 这是一个非常简单的练习 但我对此表示怀疑 因为有一个函数可以执行此操作 import urllib request def get html url f open htmlcode
  • MySQL 连接器和许可 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想到 MySQL 连接器 Java 和 NET 是 GPL 许可的 这是否意味着供应商 不是为内部应用程序开发 必须购买通过这些连接器与
  • 如果我设置 min-height 和 max-height,哪一个优先?

    我有一个菜单 有 9 个项目 我希望按钮高度为屏幕尺寸的 40px 或 11 屏幕的 1 9 不管是最大的 现在我有 min height 40px max height 11 并且始终为 40px 即使我的屏幕尺寸比这个大 我可以在 cs
  • min-sdk 大于以前版本的 android

    我有一个应用程序 它已经在 Play 商店中存在多年了 我刚刚进行了更新 该更新利用了 numberpicker 它的 min sdk 为 11 并且 v4 支持库不满足该需求 我倾向于发布我的新版本并在清单中将 min sdk 设置为 1
  • 当枚举无法序列化时,提前失败或明确抛出

    在 WCF 服务返回具有无效值 枚举类型中不存在 int 的枚举成员的 DataContract 的情况下 客户端抛出的异常为The underlying connection was closed The connection was c
  • 在Python中解析SQL查询

    我需要在 python 中构建一个迷你 sql 引擎 所以我需要一个 sql parser 并且我发现了 python sqlparse 但无法理解如何从 SQL 查询中提取列名或表名等 有人可以帮我解决这个问题吗 让我们检查 python