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

Postgresql ON CONFLICT trong sqlalchemy

Sử dụng Postgres 9.6.1, sqlachemy 1.1.4 và psycopg2 2.6.2:

  1. Chuyển đổi cấu trúc dữ liệu của bạn sang từ điển. Từ Pandas nó là

    import pandas
    from sqlalchemy import MetaData
    from sqlalchemy.dialects.postgresql import insert
    import psycopg2
    
    # The dictionary should include all the values including index values
    insrt_vals = df.to_dict(orient='records')
    
  2. Kết nối với cơ sở dữ liệu thông qua sqlalchemy. Thay vào đó, hãy thử trình điều khiển psycog2 bên dưới và hàm COPY gốc, bỏ qua tất cả việc lập chỉ mục postgres.

    csv_data = os.path.realpath('test.csv')
    con = psycopg2.connect(database = 'db01', user = 'postgres')
    cur = con.cursor()
    cur.execute("\copy stamm_data from '%s' DELIMITER ';' csv header" % csv_data)
    con.commit()
    
  3. Thực thi

    results = engine.execute(do_nothing_stmt)
    # Get number of rows inserted
    rowcount = results.rowcount
    

Cảnh báo:

Phương pháp này không hoạt động với NaT ra khỏi hộp.

Mọi thứ cùng nhau

tst_df = pd.DataFrame({'colA':['a','b','c','a','z', 'q'],
              'colB': pd.date_range(end=datetime.datetime.now() , periods=6),
              'colC' : ['a1','b2','c3','a4','z5', 'q6']})


insrt_vals = tst_df.to_dict(orient='records')
engine =      sqlalchemy.create_engine("postgresql://user:[email protected]/postgres")
connect = engine.connect()
meta = MetaData(bind=engine)
meta.reflect(bind=engine)
table = meta.tables['tstbl']
insrt_stmnt = insert(table).values(insrt_vals)

do_nothing_stmt  = insrt_stmnt.on_conflict_do_nothing(index_elements=['colA','colB'])
results = engine.execute(do_nothing_stmt)

Thay vì bước 2 và 3, hãy sử dụng psycog2 trình điều khiển với lệnh sao chép trong postgres nhanh hơn đối với các tệp lớn hơn (sắp đạt đến biểu diễn) vì nó tắt tất cả việc lập chỉ mục bảng.

csv_data = os.path.realpath('test.csv')


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Django cách kết nối lại sau DatabaseError:truy vấn hết thời gian

  2. Làm cách nào để chèn nhiều hàng bằng khóa ngoại bằng CTE trong Postgres?

  3. chọn kích thước tiếp theo và bao gồm bí danh bảng khác

  4. Kích hoạt với tên trường động

  5. Chọn người dùng chỉ thuộc các phòng ban cụ thể