PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm cách nào để SAO CHÉP NHẬP tệp json vào postgres?

Tôi đã kết thúc bằng cách sử dụng blog của Andre Dunstan câu trả lời SO này cho biết định dạng json theo một cách cụ thể để sử dụng lệnh sao chép.

Vì cấu trúc của tôi được xác định khá rõ ràng cho các tệp tôi đang phân tích cú pháp, tôi đã kết thúc với tập lệnh sau.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Phát hiện và xử lý khi một truy vấn cơ sở dữ liệu gặp sự cố

  2. Mệnh đề UPDATE-FROM trong jOOQ đưa ra giải thích cho trường CTE

  3. Cách nhanh nhất để thực hiện truy vấn xóa trong bảng lớn trong PostgreSQL

  4. Làm cách nào để tìm lần cuối cùng mà cơ sở dữ liệu PostgreSQL đã được cập nhật?

  5. Tại sao st_intersection trả về không phải là đa giác?