問題タブ [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.
python - タプル インデックスが範囲外 - ただし、関数で実行された場合のみ
現在、クエリの「FROM」句に焦点を当てて、SQLステートメントに存在するテーブルをリストするSQLParseを使用してプロセスを作成しようとしています。また、FROM 句内でネストされたクエリ (またはサブクエリ) を識別し、プロセスを再度実行して、そのネストされたクエリ内のテーブルを識別しようとしています。
このサンプルクエリの使用
以下は、動作しているコードです。
これはそのままクエリから始まり、select という単語を検索してサブクエリを識別します。
これにより、最も外側の括弧が削除され、新しい SQL ステートメントとして解析されます。これはすべて機能しており、この解析済みステートメントを前のコード ブロックから手動で実行すると、期待どおりに機能します。
次に、これを別の関数に入れようとしました:
- 最初にクエリを解析し、次を呼び出します。
- FROM 句をスキャンしてテーブルを返す関数ですが、サブクエリを識別する場合は次を呼び出します。
- スクリプトの最も外側の括弧を削除し、最初の関数を呼び出してプロセスを介して送り返す関数。
しかし、実行しようとするsqlparse.parse(res_sub)[0]
とタプルインデックスが範囲外になります。タプルではなく、str である必要があります。これは、sqlparse.sql.Statement に解析されます。
一連の関数に入れたからといって、なぜ動作が異なるのかわかりません。以下の関数コード:
私は Python に習熟していないことを強調しておく必要があります。
ありがとう
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:
私が何を意味するかがわかります。