問題タブ [sql-parser]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
60 参照

python - タプル インデックスが範囲外 - ただし、関数で実行された場合のみ

現在、クエリの「FROM」句に焦点を当てて、SQLステートメントに存在するテーブルをリストするSQLParseを使用してプロセスを作成しようとしています。また、FROM 句内でネストされたクエリ (またはサブクエリ) を識別し、プロセスを再度実行して、そのネストされたクエリ内のテーブルを識別しようとしています。

このサンプルクエリの使用

以下は、動作しているコードです。

これはそのままクエリから始まり、select という単語を検索してサブクエリを識別します。

これにより、最も外側の括弧が削除され、新しい SQL ステートメントとして解析されます。これはすべて機能しており、この解析済みステートメントを前のコード ブロックから手動で実行すると、期待どおりに機能します。

次に、これを別の関数に入れようとしました:

  • 最初にクエリを解析し、次を呼び出します。
  • FROM 句をスキャンしてテーブルを返す関数ですが、サブクエリを識別する場合は次を呼び出します。
  • スクリプトの最も外側の括弧を削除し、最初の関数を呼び出してプロセスを介して送り返す関数。

しかし、実行しようとするsqlparse.parse(res_sub)[0]とタプルインデックスが範囲外になります。タプルではなく、str である必要があります。これは、sqlparse.sql.Statement に解析されます。

一連の関数に入れたからといって、なぜ動作が異なるのかわかりません。以下の関数コード:

私は Python に習熟していないことを強調しておく必要があります。

ありがとう

0 投票する
1 に答える
93 参照

python - SQLParse - ワイルドカード LIKE 条件の問題

SQL ステートメントの Where 句に注目しており、Where 句で使用されているすべての列を取り戻そうとしています。以下は SQL の例です。

私が期待している列は、T.JOIN_DT、T.POSTING_DT、T.PERS_ID、および T.LEAVE_DT です。以下のコードは、T.PERS_ID 以外のすべてを引き出すことができます。

「AND P.PERS_ID LIKE '%123'」を 1 つのトークンにグループ化しているようですが、それをさらに分割して識別子 P.PERS_ID を取得する方法がわかりません。print(condition)後に追加すると、for condition in item.tokens:私が何を意味するかがわかります。