sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan KOPIERE IMPORTERE en json-fil til postgres?

Jeg endte med at bruge Andre Dunstans blog og dette SO-svar som siger, at man skal formatere json på en bestemt måde for at bruge kopieringskommandoen.

Da min struktur er ret defineret for de filer, jeg parser, endte jeg med følgende script.

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. Dynamisk dropdownlisteværdi fra database

  2. Ret fejl "ORA-01789:forespørgselsblokken har forkert antal resultatkolonner"

  3. Korrekt måde at opsætte MYSQL-database til relaterede tagsøgninger?

  4. Indsendelsesformularen forbliver ikke på samme side