sql >> データベース >  >> RDS >> PostgreSQL

生のSQLファイルからコメントをクリーンアップする方法

    sqlparse をお試しください モジュール。

    更新された例:挿入値内にコメントを残し、CREATEFUNCTIONブロック内にコメントを残す 。さらに微調整して動作を調整できます:

    import sqlparse
    from sqlparse import tokens
    
    queries = '''
    CREATE FUNCTION func1(a integer) RETURNS void
        LANGUAGE plpgsql
            AS $$
            BEGIN
                    -- comment
           END;
           $$;
    SELECT -- comment
    * FROM -- comment
    TABLE foo;
    -- comment
    INSERT INTO foo VALUES ('a -- foo bar');
    INSERT INTO foo
    VALUES ('
    a 
    -- foo bar'
    );
    
    '''
    
    IGNORE = set(['CREATE FUNCTION',])  # extend this
    
    def _filter(stmt, allow=0):
        ddl = [t for t in stmt.tokens if t.ttype in (tokens.DDL, tokens.Keyword)]
        start = ' '.join(d.value for d in ddl[:2])
        if ddl and start in IGNORE:
            allow = 1
        for tok in stmt.tokens:
            if allow or not isinstance(tok, sqlparse.sql.Comment):
                yield tok
    
    for stmt in sqlparse.split(queries):
        sql = sqlparse.parse(stmt)[0]
        print sqlparse.sql.TokenList([t for t in _filter(sql)])
    

    出力:

    CREATE FUNCTION func1(a integer) RETURNS void
        LANGUAGE plpgsql
            AS $$
            BEGIN
                    -- comment
           END;
           $$;
    
    SELECT * FROM TABLE foo;
    
    INSERT INTO foo VALUES ('a -- foo bar');
    
    INSERT INTO foo
    VALUES ('
    a
    -- foo bar'
    );
    


    1. ADO.NETプロバイダーの「Oracle.ManagedDataAccess.Client」がマシンまたはアプリケーションの構成ファイルに登録されていないか、ロードできませんでした

    2. PHPセッションデータをファイルシステムではなくデータベースに保存するにはどうすればよいですか?

    3. ODBC4.0

    4. mysqlでバイナリマスクを表す2つの文字列を比較(AND)するにはどうすればよいですか?