df_name.to_sql('table_name',
schema = 'public',
con = engine,
index = False,
if_exists = 'replace')
Im рдПрдХ 500,000 рдкрдВрдХреНрддрд┐ рдбреЗрдЯрд╛рдлреНрд░реЗрдо рдХреЛ AWS рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реИ рдФрд░ рдбреЗрдЯрд╛ рдХреЛ рдкреБрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд, рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред
рдпрд╣ рдПрдХ рдХрд╛рдлреА рдмрдбрд╝рд╛ SQL рд╕рд░реНрд╡рд░ рд╣реИ рдФрд░ рдореЗрд░рд╛ рдЗрдВрдЯрд░рдиреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдЙрддреНрдХреГрд╖реНрдЯ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдпреЛрдЧрджрд╛рди рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рд╣реИред
рддреБрд▓рдирд╛ рдореЗрдВ, csv2sql рдпрд╛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ psql рдореЗрдВ рдмрд┐рд▓реНрд▓реА рдФрд░ рдкрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рддреЗрдЬ рд╣реИред
рдпрд╣рд╛рдБ рджреЗрдЦреЗрдВ: 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 рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╣рдЯрд╛ рджреЗрдВред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рд╕рдВрдкреАрдбрд╝рд┐рдд рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рд▓рд┐рдЦрддрд╛ рд╣реИ)
рдЕрд░реЗ @ рдЯрд┐рдо-рд╕реМрдЪреБрдХ, рдПрдХ рд╣реА рддреНрд░реБрдЯрд┐ рдореЗрдВ рднреА рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ рдЬреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ 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()>``
рдпрд╣рд╛рдБ рджреЗрдЦреЗрдВ: https://stackoverflow.com/questions/48006551/speeding-up-pandas-dataframe-to-sql-with-fast-executemany-of-pyodbc
рдореИрдВрдиреЗ рдЗрд╕реЗ 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
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реИ $
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЗрд╕ рдХреЛрдб рдХреЛ
engine = create_engine(connection_string)
рдиреАрдЪреЗ рдЬреЛрдбрд╝реЗрдВ:рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ,
to_sql
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдореЗрдВ 7 рдорд┐рдирдЯ рд▓рдЧ рд░рд╣реЗ рдереЗ, рдФрд░ рдЕрдм рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ 5 рд╕реЗрдХрдВрдб рд▓рдЧрддреЗ рд╣реИрдВ);