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

to_sql + sqlalchemy + sao chép từ + công cụ postgresql?

Điều này không hoàn toàn đúng. Bạn có thể triển khai điều này để sử dụng COPY FROM bằng cách cung cấp chức năng của riêng bạn cho phương thức kwarg method to_sql đó chấp nhận. Bit quan trọng trong tài liệu Pandas cho DataFrame .to_sql là nơi method có thể không chỉ là một chuỗi, mà còn có thể gọi. Đó là những gì bạn sẽ cung cấp

Ví dụ:

from csv import (writer as csv_writer, QUOTE_MINIMAL)
from io import StringIO

def some_function(df, connection):        
    try:
        frame.to_sql(
            'my_table',
            connection,
            schema='public',
            if_exists='append',
            index=False,
            method=copy_from_method)
    except Exception as err:
        print('Got an error ({})'.format(str(err))

Sau đó, bạn có thể triển khai copy_from_method như một cái gì đó như thế này:

def copy_from_method(table, conn, keys, data_iter, pre_truncate=False, fatal_failure=False):
    "Custom method for pandas.DataFrame.to_sql that will use COPY FROM"""

    dbapi_conn = conn.connection
    cur = dbapi_conn.cursor()

    s_buf = StringIO()
    writer = csv_writer(s_buf, quoting=QUOTE_MINIMAL)
    writer.writerows(data_iter)
    s_buf.seek(0)

    columns = ', '.join('"{}"'.format(k) for k in keys)
    table_name = '{}.{}'.format(
        table.schema, table.name) if table.schema else table.name

    sql_query = 'COPY %s (%s) FROM STDIN WITH CSV' % (table_name, columns)
    cur.copy_expert(sql=sql_query, file=s_buf)
    return cur.rowcount

Ví dụ copy_from_method có thể sử dụng một số công việc rõ ràng- và bạn sẽ cần phải cẩn thận với việc trích dẫn và thoát với trình viết CSV trong một số trường hợp. Nhưng phiên bản thô này sẽ hoạt động tương đối tốt, loại bỏ mọi lỗi đánh máy / sao chép dán (đây là phiên bản rút gọn mà tôi sử dụng trong một dự án)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Không thể sử dụng di chuyển trong EF Core:42P07:quan hệ AspNetRoles đã tồn tại

  2. Chuyển đổi múi giờ UTC trong postgresql thành EST (giờ địa phương)

  3. Bắt hoạt động lỗi:FATAL:xin lỗi, quá nhiều khách hàng đã sử dụng psycopg2

  4. PostgreSQL:Trong một thứ tự TỔNG HỢP SQL DUY NHẤT theo giá trị số được tính từ một cột văn bản

  5. AssertionError:kết nối cơ sở dữ liệu không được đặt thành UTC