Pandas: to_sql рдмрд╣реБрдд рдзреАрдорд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 1 рдлрд╝рд░ре░ 2017  ┬╖  24рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: pandas-dev/pandas

рдХреЛрдб рдирдореВрдирд╛,

df_name.to_sql('table_name',
                          schema = 'public',
                          con = engine,
                          index = False,
                          if_exists = 'replace')

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг

Im рдПрдХ 500,000 рдкрдВрдХреНрддрд┐ рдбреЗрдЯрд╛рдлреНрд░реЗрдо рдХреЛ AWS рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реИ рдФрд░ рдбреЗрдЯрд╛ рдХреЛ рдкреБрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд, рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред

рдпрд╣ рдПрдХ рдХрд╛рдлреА рдмрдбрд╝рд╛ SQL рд╕рд░реНрд╡рд░ рд╣реИ рдФрд░ рдореЗрд░рд╛ рдЗрдВрдЯрд░рдиреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдЙрддреНрдХреГрд╖реНрдЯ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдпреЛрдЧрджрд╛рди рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рд╣реИред

рддреБрд▓рдирд╛ рдореЗрдВ, csv2sql рдпрд╛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ psql рдореЗрдВ рдмрд┐рд▓реНрд▓реА рдФрд░ рдкрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рддреЗрдЬ рд╣реИред

IO SQL Usage Question

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЗрд╕ рдХреЛрдб рдХреЛ engine = create_engine(connection_string) рдиреАрдЪреЗ рдЬреЛрдбрд╝реЗрдВ:

from sqlalchemy import event

@event.listens_for(e, 'before_cursor_execute')
def receive_before_cursor_execute(conn, cursor, statement, params, context, executemany):
    if executemany:
        cursor.fast_executemany = True
        cursor.commit()

рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ, to_sql рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдореЗрдВ 7 рдорд┐рдирдЯ рд▓рдЧ рд░рд╣реЗ рдереЗ, рдФрд░ рдЕрдм рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ 5 рд╕реЗрдХрдВрдб рд▓рдЧрддреЗ рд╣реИрдВ);

рд╕рднреА 24 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдпрд╣рд╛рдБ рджреЗрдЦреЗрдВ: http://stackoverflow.com/questions/33816918/write-large-pandas-dataframes-to-sql-server-database

SQLServer рдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ рджрдХреНрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рднрд╛рд░реА рдЕрдкрд▓реЛрдб рдХреЗ рд╕рд╛рде csv рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

рдЖрдкрдХреЛ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ: http://odo.pydata.org/en/latest/perf.html

ODO рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдпрд╣ рдЙрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди d6tstack рдиреЗ рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ https://github.com/d6t/d6tstack/blob/master/examples-sql.ipynbред рдЖрдк рдкрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдпрд╛рдд рдХреЛ рд╢реАрдШреНрд░рддрд╛ рд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкреЛрд╕реНрдЯрдкреАрдЬ COPY FROM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЖрд░рдбреАрдПрд╕ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЗрд╕ рдХреЛрдб рдХреЛ engine = create_engine(connection_string) рдиреАрдЪреЗ рдЬреЛрдбрд╝реЗрдВ:

from sqlalchemy import event

@event.listens_for(e, 'before_cursor_execute')
def receive_before_cursor_execute(conn, cursor, statement, params, context, executemany):
    if executemany:
        cursor.fast_executemany = True
        cursor.commit()

рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ, to_sql рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдореЗрдВ 7 рдорд┐рдирдЯ рд▓рдЧ рд░рд╣реЗ рдереЗ, рдФрд░ рдЕрдм рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ 5 рд╕реЗрдХрдВрдб рд▓рдЧрддреЗ рд╣реИрдВ);

рдзрдиреНрдпрд╡рд╛рдж @ рдореЛрд╣рддрд░рдорд╛!
рдЗрд╕рд╕реЗ рдмрд╣реБрдд рдорджрдж рдорд┐рд▓реА!

# dont forget to import event
from sqlalchemy import event, create_engine

engine = create_engine(connection_string)

@event.listens_for(engine, 'before_cursor_execute')
def receive_before_cursor_execute(conn, cursor, statement, params, context, executemany):
    if executemany:
        cursor.fast_executemany = True
        cursor.commit()

рдореИрдВрдиреЗ рдЗрд╕ рд╕реБрдзрд╛рд░ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛ рд╣реИ:

AttributeError: 'psycopg2.extensions.cursor' object has no attribute 'fast_executemany'

рдХрд┐рд╕реА рдХреЛ рдкрддрд╛ рд╣реИ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ?

рдЕрд░реЗ @ рдЯрд┐рдо-рд╕реМрдЪреБрдХ, рдПрдХ рд╣реА рддреНрд░реБрдЯрд┐ рдореЗрдВ рднреА рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ рдЬреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ pandas.io.sql.py рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рдВрдкрд╛рджрди рд╢рд╛рдорд┐рд▓ рд╣реИ (рдмрд╕ рдлрд┐рд░ рд╕реЗ рдЖрдпрд╛рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ __pyc___ рд╕реЗ .pyc рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╣рдЯрд╛ рджреЗрдВред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рд╕рдВрдкреАрдбрд╝рд┐рдд рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рд▓рд┐рдЦрддрд╛ рд╣реИ)

https://github.com/pandas-dev/pandas/issues/8953

рдЕрд░реЗ @ рдЯрд┐рдо-рд╕реМрдЪреБрдХ, рдПрдХ рд╣реА рддреНрд░реБрдЯрд┐ рдореЗрдВ рднреА рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ рдЬреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ pandas.io.sql.py рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ рд╕рдВрдкрд╛рджрди рд╢рд╛рдорд┐рд▓ рд╣реИ (рдмрд╕ pycache рд╕реЗ .pyc рдлрд╝рд╛рдЗрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдЯрд╛рдПрдВред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рд╕рдВрдкреАрдбрд╝рд┐рдд рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рд▓рд┐рдЦрддрд╛ рд╣реИ)

8953

рдЕрдВрдХ # 8953 рдЬреЛ @ bsaunders23 рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИ, рд╡рд╣ "рдордВрдХреА рдкреИрдЪ" рдХрд╛ рд░рд╛рд╕реНрддрд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ (рдЗрд╕реЗ рд░рди рдЯрд╛рдЗрдо рдкрд░ рдареАрдХ рдХрд░реЗрдВ)ред рдореИрдВрдиреЗ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдпрд╛, рдФрд░ рдПрдХ 20k рдбреЗрдЯрд╛рд╕реЗрдЯ рдЬреЛ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ 10+ рдорд┐рдирдЯ рд▓реЗрддрд╛ рд╣реИ, рддрдм рдХреЗрд╡рд▓ 4 рд╕реЗрдХрдВрдб рд▓рдЧрддреЗ рд╣реИрдВред

рдзрдиреНрдпрд╡рд╛рдж @ рдореЛрд╣рддрд░рдорд╛!
рдЗрд╕рд╕реЗ рдмрд╣реБрдд рдорджрдж рдорд┐рд▓реА!

# dont forget to import event
from sqlalchemy import event, create_engine

engine = create_engine(connection_string)

@event.listens_for(engine, 'before_cursor_execute')
def receive_before_cursor_execute(conn, cursor, statement, params, context, executemany):
    if executemany:
        cursor.fast_executemany = True
        cursor.commit()

рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЖрддреНрдо рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЧ рдХреЗ рдЕрдВрджрд░ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЖрддреНрдо рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЧ рдХреЗ рдЕрдВрджрд░ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

self.engine рд╕рдВрджрд░реНрдн рджреЗрдХрд░ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рдЙрджрд╛рд╣рд░рдг:

    self.engine = sqlalchemy.create_engine(connectionString, echo=echo)
    self.connection = self.engine.connect()

    @event.listens_for(self.engine, 'before_cursor_execute')
    def receive_before_cursor_execute(conn, cursor, statement, params, context, executemany):
        print("Listen before_cursor_execute - executemany: %s" % str(executemany))
        if executemany:
            cursor.fast_executemany = True
            cursor.commit()

рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдХрд┐рд╕ рдкрд╛рдВрдбрд╛ рдФрд░ рд╕реНрдХреЗрд▓реЗрдХрд▓рдХреЗрдореА рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

рдореИрдВрдиреЗ рдЗрд╕реЗ sqlalchemy рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА: 1.2.4-py35h14c3975_0 рдФрд░ 1.2.11-py35h7b6447c_0

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ

рдЧреБрдг: 'psycopg2.extensions.cursor' рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд╣реИ 'fast_executemany'

@ dean12 @ рдореЛрд╣рддрд░рдорд╛

рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ? рдпрд╛ рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдХрд┐рд╕ рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

<# dont forget to import event
from sqlalchemy import event, create_engine

engine = create_engine(connection_string)

@event.listens_for(engine, 'before_cursor_execute')
def receive_before_cursor_execute(conn, cursor, statement, params, context, executemany):
    if executemany:
        cursor.fast_executemany = True
        cursor.commit()>``

рдореИрдВрдиреЗ рдЗрд╕реЗ sqlalchemy рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА: 1.2.4-py35h14c3975_0 рдФрд░ 1.2.11-py35h7b6447c_0

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ

рдЧреБрдг: 'psycopg2.extensions.cursor' рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд╣реИ 'fast_executemany'

рдЖрдк psycopg2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рдкреЛрд╕реНрдЯрдЧреНрд░реИрд╕реНрдХрд▓ рдбреНрд░рд╛рдЗрд╡рд░ рд╣реИред рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдФрд░ pyodbc рдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Microsoft SQL рд╕рд░реНрд╡рд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИред

'dtype' рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛

рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЖрддреНрдо рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЧ рдХреЗ рдЕрдВрджрд░ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

self.engine рд╕рдВрджрд░реНрдн рджреЗрдХрд░ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рдЙрджрд╛рд╣рд░рдг:

    self.engine = sqlalchemy.create_engine(connectionString, echo=echo)
    self.connection = self.engine.connect()

    @event.listens_for(self.engine, 'before_cursor_execute')
    def receive_before_cursor_execute(conn, cursor, statement, params, context, executemany):
        print("Listen before_cursor_execute - executemany: %s" % str(executemany))
        if executemany:
            cursor.fast_executemany = True
            cursor.commit()

рдХреНрдпрд╛ рдЖрдкрдХреЛ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд╣реА рдЙрддреНрддрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ https://docs.sqlalchemy.org/en/13/dialects/postgresql.html#psycopg2 -batch-mode-fast-рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрджрд┐ рдЖрдк pandas dataframe рдмрдЪрд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВред postgres

рдкрдВрдбреЛрдВ рдХреЗ рдПрдХ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ method рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ 'рдмрд╣реБ' рдЪреБрдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдХреЛрдб рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдЪрд▓рддрд╛ рд╣реИред

fast_executemany рдЕрдм рдПрдХ рд╣реА рдЪрд░рдг рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (sqlalchemy> = 1.3.0):

engine = sqlalchemy.create_engine(connection_string, fast_executemany=True)

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдбреЙрдХреНрд╕ рдореЗрдВ рдХрд╣реАрдВ рдЙрд▓реНрд▓реЗрдЦ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдпрд╛ рдХрд┐рд╕реА рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде? рдпрд╣ рдкрдВрдбреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЬреЛрдбрд╝ рд╣реИ рдЬреЛ рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред

рдкрдВрдбреЛрдВ рдХреЗ рдПрдХ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ method рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ 'рдмрд╣реБ' рдЪреБрдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдХреЛрдб рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдЪрд▓рддрд╛ рд╣реИред

рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ chunksize рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░рдирд╛ to_sql рдмреИрдЪ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдирд╣реАрдВред

MS SQL рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд▓реНрдк turbodbc.Cursor.insertmanycolumns рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреА рд╣реИ, рдореИрдВрдиреЗ рд╕рдордЭрд╛рдпрд╛ рд╣реИ рдХрд┐ рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП StackOverflow рдкреЛрд╕реНрдЯ рдореЗрдВ: https://stackoverflow.com/a/62671681/1689261

рдЗрд╕ рдкрд░ рднрд╡рд┐рд╖реНрдп рдХреЗ рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП, to_sql рдХреЗ рд▓рд┐рдП 'batch_mode' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЛ рд╕рдВрдпреЛрдЬрди рд╣реИрдВ:

create_engine(connection_string, executemany_mode='batch', executemany_batch_page_size=x)

рдпрд╛

create_engine(connection_string, executemany_mode='values', executemany_values_page_size=x)

рдЗрди рддрд░реНрдХреЛрдВ рдкрд░ рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: https://docs.sqlalchemy.org/en/13/dialects/postgresql.html#psycopg2 -fast-рдирд┐рд╖реНрдкрд╛рджрдХ-рд╕рд╣рд╛рдпрдХ

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП method рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ:

рд╕рд┐рдЧреНрдиреЗрдЪрд░ (pd_table, con, keys, data_iter) рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп: рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмреИрдХрдПрдВрдб рдмреЛрд▓реА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдзрд┐рдХ рдкрд░рдлреЙрд░реНрдореЗрдВрдЯ рдЗрдВрд╕рд░реНрд╢рди рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рд╕реЗ рдпрд╣рд╛рдВ https://pandas.pydata.org/pandas-docs/stable/user_guide/io.html#insertion -method рдФрд░ рдХреЙрд▓ рдХрд░реЗрдВ

COPY FROM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реИ $

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

marcelnem picture marcelnem  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

andreas-thomik picture andreas-thomik  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Abrosimov-a-a picture Abrosimov-a-a  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ericdf picture ericdf  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

swails picture swails  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ