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

jsonファイルをpostgresにコピーインポートするにはどうすればよいですか?

    最終的にAndreDunstanのブログ を使用しました。 およびこのSOの回答 これは、copyコマンドを使用する特定の方法でjsonをフォーマットすることを示しています。

    私の構造は解析しているファイルに対してかなり定義されているので、次のスクリプトになりました。

    def file_len(fname):
        # to find the number of lines in the file.
        # Has been pretty efficient even for millions of records
        with open(fname) as f:
            for i, l in enumerate(f):
                pass
        return i + 1
    
    INPUTFILE = '/path/to/input.json'
    OUTPUTFILE = '/path/to/output.json.csv'
    LEN = file_len(INPUTFILE)
    with open(OUTPUTFILE, 'w') as fo:
        with open(INPUTFILE, 'r') as fi:
            for i, l in enumerate(fi):
                # I skip the first line
                if i == 0: continue 
                
                # To remove the ']}}' from the end
                elif i+1 == LEN: _ = fo.write(l[:-3])
                
                # To remove the ',' from the end 
                # and add \n since write does not add newline on its own
                else: _ = fo.write(l[:-2]+'\n') 
    
    # load statement
    
    import sqlalchemy
    POSTGRESQL = f'postgresql+psycopg2://{USERNAME}:{PASSWORD}@{HOSTNAME}/{DB}'
    engine = sqlalchemy.create_engine(POSTGRESQL, echo=True)
                
    con = engine.connect()
    trans = con.begin()
    LOAD_SQL = f"COPY tablename from '{OUTPUTFILE}' with csv delimiter E'\x01' quote E'\x02' null as '';"
    try:
        con.execute(LOAD_SQL)
        trans.commit()
    except Exception as e:
        trans.rollback()
    finally:
        con.close()
    



    1. 変数が値phpに等しい場合

    2. LOAD_FILE()関数の代わりに?

    3. Laravel:PDOException:ドライバーが見つかりませんでした

    4. このデータをMySQLスキーマに保存する適切な方法は何ですか?