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

Làm cách nào để cập nhật cột bảng Postgres bằng cách sử dụng khung dữ liệu gấu trúc?

Tôi gặp phải một vấn đề tương tự và giải pháp được chấp nhận hiện tại là quá chậm đối với tôi. Bảng của tôi có 500k + hàng và tôi cần cập nhật 100k + hàng. Sau thời gian dài nghiên cứu và thử và sai, tôi đã đi đến một giải pháp hiệu quả và đúng đắn.

Ý tưởng là sử dụng psycopg làm người viết và sử dụng bảng tạm thời. df là khung dữ liệu gấu trúc của bạn có chứa các giá trị bạn muốn đặt.

import psycopg2

conn = psycopg2.connect("dbname='db' user='user' host='localhost' password='test'")
cur = conn.cursor()

rows = zip(df.id, df.z)
cur.execute("""CREATE TEMP TABLE codelist(id INTEGER, z INTEGER) ON COMMIT DROP""")
cur.executemany("""INSERT INTO codelist (id, z) VALUES(%s, %s)""", rows)

cur.execute("""
    UPDATE table_name
    SET z = codelist.z
    FROM codelist
    WHERE codelist.id = vehicle.id;
    """)

cur.rowcount
conn.commit()
cur.close()
conn.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. Rails tham gia truy vấn

  2. psql:FATAL:vai trò postgres không tồn tại

  3. Nén văn bản trong PostgreSQL

  4. 'Quá nhiều kết nối' được tạo trong postgres khi tạo trang tổng quan trong Pentaho

  5. ScaleGrid PostgreSQL trên Cơ sở hạ tầng đám mây VMware