PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

to_sql + sqlalchemy + копиране от + postgresql двигател?

Това не е съвсем вярно. Можете да приложите това, за да използвате COPY FROM като предоставите своя собствена функция за kwarg method че to_sql приема. Ключовият бит в документацията на Pandas за DataFrame .to_sql където е method може да бъде не само низ, но и извикваем. Това ще предоставите вие

Например:

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))

След това можете да приложите copy_from_method като нещо подобно:

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

Примерът copy_from_method очевидно може да ви свърши работа - и в някои случаи ще трябва да внимавате с цитирането и екранирането с програмата за писане на 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. Защо използването на едно и също поле при филтриране води до различно време за изпълнение? (различно използване на индекс)

  2. Как да изхвърлите структурата на базата данни на PostgreSQL (всеки обект в отделен файл)

  3. Postgres грешка при вмъкване - ГРЕШКА:невалидна последователност от байтове за кодиране UTF8:0x00

  4. Групово вмъкване в Postgres с brianc/node-postgres

  5. Как да използвам подзаявка в django?