-2
SQLクエリ(PostgreSQLの種類)を解析し、それらの構造化表現を与えるライブラリがありますか? sqlparseがありますが、これではクエリが使用しているテーブルを簡単に把握することはできません。私はSELECT
クエリのサポートが必要ですが、その中のいくつかは非常に複雑です。SQLを階層的な結果に解析して解析する
SQLクエリ(PostgreSQLの種類)を解析し、それらの構造化表現を与えるライブラリがありますか? sqlparseがありますが、これではクエリが使用しているテーブルを簡単に把握することはできません。私はSELECT
クエリのサポートが必要ですが、その中のいくつかは非常に複雑です。SQLを階層的な結果に解析して解析する
pyparsingに付属しているselect_parser.pyの例では、ステートメントのParseResultsデータ構造が得られます。ここで埋め込まれたテストケースは次のとおり
select * from xyzzy where z > 100
select * from xyzzy where z > 100 order by zz
select * from xyzzy
select z.* from xyzzy
select a, b from test_table where 1=1 and b='yes'
select a, b from test_table where 1=1 and b in (select bb from foo)
select z.a, b from test_table where 1=1 and b in (select bb from foo)
select z.a, b from test_table where 1=1 and b in (select bb from foo) order by b,c desc,d
select z.a, b from test_table left join test2_table where 1=1 and b in (select bb from foo)
select a, db.table.b as BBB from db.table where 1=1 and BBB='yes'
select a, db.table.b as BBB from test_table,db.table where 1=1 and BBB='yes'
select a, db.table.b as BBB from test_table,db.table where 1=1 and BBB='yes' limit 50
結果は、入力文の異なる構成要素に構造化され、名前フィールドは、オブジェクトの属性(result.table
:'XYZZY'
、result.where_expr
:['z', '>', '100']
、等)のようにアクセスすることができます。
select * from xyzzy where z > 100
['SELECT', ['*'], 'FROM', 'xyzzy', 'WHERE', ['z', '>', '100']]
- columns: ['*']
- from: ['xyzzy']
- table: ['xyzzy']
- where_expr: ['z', '>', '100']
select * from xyzzy where z > 100 order by zz
['SELECT', ['*'], 'FROM', 'xyzzy', 'WHERE', ['z', '>', '100'], 'ORDER', 'BY', [['zz']]]
- columns: ['*']
- from: ['xyzzy']
- order_by_terms: [['zz']]
[0]:
['zz']
- order_key: zz
- table: ['xyzzy']
- where_expr: ['z', '>', '100']
select * from xyzzy
['SELECT', ['*'], 'FROM', 'xyzzy']
- columns: ['*']
- from: ['xyzzy']
- table: ['xyzzy']
これは、SQLiteのためのSQL方言に書かれていたが、Postgresのに適応することは、あまりにもひどいではありません。ここでは最初の3回の試験の結果です。
あなたはあなたが求めているものの例を挙げることができますか? –