Pandas: to_sql() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЬрд╛рд░реА рд░рдЦреЗрдВ рдпрджрд┐ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 13 рдЕрдкреНрд░реИрд▓ 2017  ┬╖  19рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: pandas-dev/pandas

рдХреЛрдб рдирдореВрдирд╛, рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдЙрджрд╛рд╣рд░рдг

df.to_sql('TableNameHere', engine, if_exists='append', chunksize=900, index=False)

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

рдореИрдВ рдПрдХ SQL рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдПрдХ рдмрдбрд╝рд╛ рдбреЗрдЯрд╛рдлреНрд░реЗрдо рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо рдореЗрдВ рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпрд╛рдБ SQL рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣реИрдВ, рдХреБрдЫ рдирд╣реАрдВ рд╣реИрдВред рд▓реЗрдХрд┐рди to_sql() рдПрдХ рднреА рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд╛ рдкрддрд╛ рдЪрд▓рдиреЗ рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред

рдпрд╣ to_sql(if_exists='append') рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреБрдВрдЬрд┐рдпрд╛рдБ рдереАрдВ рдФрд░ рдмрд╕ рдирдИ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВ, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдмрдВрдж рди рдХрд░реЗрдВред рдмрдбрд╝реЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ рдбреБрдкреНрд▓реАрдХреЗрдЯ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рд╢рд╛рдпрдж рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдФрд░ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реНрдХ рдЬреЛрдбрд╝реЗрдВ? рд╢рд╛рдпрдж рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд if_exists рд╡рд┐рдХрд▓реНрдк рдЬреИрд╕реЗ 'append_skipdupes' ?

pd.show_versions() . рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ

рд╕реНрдерд╛рдкрд┐рдд рд╕рдВрд╕реНрдХрд░рдг

рдкреНрд░рддрд┐рдмрджреНрдз: рдХреЛрдИ рдирд╣реАрдВ
рдЕрдЬрдЧрд░: 3.6.0.рдЕрдВрддрд┐рдо.0
рдкрд╛рдпрдерди-рдмрд┐рдЯреНрд╕: 64
рдУрдПрд╕: рд╡рд┐рдВрдбреЛрдЬрд╝
рдУрдПрд╕-рд░рд┐рд▓реАрдЬрд╝: 10
рдорд╢реАрди: рдПрдПрдордбреА 64
рдкреНрд░реЛрд╕реЗрд╕рд░: Intel64 рдкрд░рд┐рд╡рд╛рд░ 6 рдореЙрдбрд▓ 60 рд╕реНрдЯреЗрдкрд┐рдВрдЧ 3, GenuineIntel
рдмрд╛рдЗрдЯрдСрд░реНрдбрд░: рдереЛрдбрд╝рд╛
LC_ALL: рдХреЛрдИ рдирд╣реАрдВ
рд▓реИрдВрдЧ: рдХреЛрдИ рдирд╣реАрдВ
рд╕реНрдерд╛рди: рдЕрдВрдЧреНрд░реЗрдЬрд╝реА_рд╕рдВрдпреБрдХреНрдд рд░рд╛рдЬреНрдп.1252

рдкрд╛рдВрдбрд╛: 0.19.2
рдирд╛рдХ: рдХреЛрдИ рдирд╣реАрдВ
рдкрд┐рдк: 9.0.1
рд╕реЗрдЯрдЕрдкрдЯреВрд▓: 28.8.0
рд╕рд╛рдЗрдерди: рдХреЛрдИ рдирд╣реАрдВ
рд╕реБрдиреНрди: 1.12.0
scipy: рдХреЛрдИ рдирд╣реАрдВ
statsmodels: рдХреЛрдИ рдирд╣реАрдВ
xarray: рдХреЛрдИ рдирд╣реАрдВ
рдЖрдИрдкреАрдерди: 5.3.0
рд╕реНрдлрд┐рдВрдХреНрд╕: рдХреЛрдИ рдирд╣реАрдВ
рдкрд╛рддреНрд╕реА: рдХреЛрдИ рдирд╣реАрдВ
рдбреЗрдЯреБрдЯрд┐рд▓: 2.6.0
рдкрд╛рдЗрдЯреНрдЬрд╝: 2016.10
рдмреНрд▓реЛрд╕реНрдХ: рдХреЛрдИ рдирд╣реАрдВ
рдЕрдбрд╝рдЪрди: рдХреЛрдИ рдирд╣реАрдВ
рдЯреЗрдмрд▓: рдХреЛрдИ рдирд╣реАрдВ
numexpr: рдХреЛрдИ рдирд╣реАрдВ
рдореИрдЯрдкреНрд▓реЛрдЯрд▓рд┐рдм: рдХреЛрдИ рдирд╣реАрдВ
рдУрдкрдирдкреАрдПрдХреНрд╕рдПрд▓: рдХреЛрдИ рдирд╣реАрдВ
xlrd: рдХреЛрдИ рдирд╣реАрдВ
xlwt: рдХреЛрдИ рдирд╣реАрдВ
xlsxwriter: рдХреЛрдИ рдирд╣реАрдВ
рдПрд▓рдПрдХреНрд╕рдПрдордПрд▓: рдХреЛрдИ рдирд╣реАрдВ
рдмреАрдПрд╕4: рдХреЛрдИ рдирд╣реАрдВ
html5lib: 0.999999999
httplib2: рдХреЛрдИ рдирд╣реАрдВ
рдЖрд╡реЗрджрдХ: рдХреЛрдИ рдирд╣реАрдВ
sqlalchemy: 1.1.9
pymysql: рдХреЛрдИ рдирд╣реАрдВ
psycopg2: рдХреЛрдИ рдирд╣реАрдВ
рдЬрд┐рдиреНрдЬрд╛ 2: 2.9.5
рдмреЛрдЯреЛ: рдХреЛрдИ рдирд╣реАрдВ
pandas_datareader: рдХреЛрдИ рдирд╣реАрдВ

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

рдпрд╣ "рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдЕрдкрдбреЗрдЯ рдкрд░" рдореЛрдб рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

рдпрд╣ "рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдЕрдкрдбреЗрдЯ рдкрд░" рдореЛрдб рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

@rosstripi рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди AFAIK рдореБрдЦреНрдп рдмрд╛рдзрд╛ рдПрдХ рд╕реНрд╡рд╛рдж рдЕрдЬреНрдЮреЗрдпрд╡рд╛рджреА рддрд░реАрдХреЗ рд╕реЗ рдПрд╕рдХреНрдпреВрдПрд▓/рд╕реНрдХреНрд▓рд╛рд▓реНрдХреЗрдореА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХреБрдЫ рдЕрдиреНрд╡реЗрд╖рдг рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕реНрд╡рд╛рдЧрдд рдпреЛрдЧреНрдп рд╣реИ!

рдирдорд╕реНрддреЗ рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд┐рдХрд╛рд▓рд╛ рд╣реИ? рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдУ

рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ?

рдореИрдВ рдЕрдм PostgreSQL рдФрд░ SQLAlchemy рдХреЗ рд╕рд╛рде рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ "рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдЕрдкрдбреЗрдЯ рдкрд░" рд░рдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ред

рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж

рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЕрджреНрд╡рд┐рддреАрдп рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛:

sqlquery="ALTER 'TABLE DATABASE'.'TABLE' DROP INDEX 'idx_name'"
рдмрд╛рдж рдореЗрдВ
df.to_sql('TableNameHere', engine, if_exists='append', chunksize=900, index=False)
рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдмрд╕ рдЕрдкрдиреЗ MySQL рд╕рд░реНрд╡рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЗрдВрдбреЗрдХреНрд╕ рдЬреЛрдбрд╝рдиреЗ рджреЗрдВ рдФрд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВред
sqlquery="ALTER IGNORE TABLE 'DATABASE'.'TABLE' ADD UNIQUE INDEX 'idx_name' ('column_name1' ASC, 'column_name2' ASC, 'column_name3' '[ASC | DESC]')"

рдЖрдкрдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдпрд╣ рд╕рд╣рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рд╡реИрд╕реЗ рднреА if_exists рд╡рд┐рдХрд▓реНрдк рдЬреИрд╕реЗ append_skipdupes рдЬреНрдпрд╛рджрд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред

append_skipdupes рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛ред

рд╣рд╛рдБ, append_skipdupes +1

рд╕рд╣рдордд рдереЗ рдХрд┐ df.to_sql() рдореЗрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

рдпрд╣рд╛рдБ рдореИрдВ sqlite рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╣реИ:

CREATE TABLE IF NOT EXISTS my_table_name (
    some_kind_of_id INT PRIMARY KEY ON CONFLICT IGNORE,
    ...

рдлрд┐рд░, рдЬрдм рдореИрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рд╡реЗ рдЪреБрдкрдЪрд╛рдк рдЕрдирджреЗрдЦрд╛ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЧреИрд░-рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдбреЗрдЯрд╛ рд╕реНрдерд┐рд░ рд╣реИ (рдпрд╛рдиреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ), рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдлрд╝реАрдб рдХрд╛ рд░реВрдк рдРрд╕рд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдРрд╕реЗ рдбреБрдкреНрд▓реАрдХреЗрдЯ рдорд┐рд▓реЗрдВрдЧреЗ рдЬрд┐рдиреНрд╣реЗрдВ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

MariaDb рдФрд░ MySql рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рди:
df.to_csv("test.csv")
рдлрд┐рд░ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
LOAD DATA INFILE 'test.csv' IGNORE INTO TABLE mytable рдпрд╛
LOAD DATA INFILE 'test.csv' REPLACE INTO TABLE mytable ред

INSERT рдХреА рддреБрд▓рдирд╛ рдореЗрдВ LOAD DATA рдмрд╣реБрдд рддреЗрдЬ рд╣реИред

рдкреВрд░рд╛ рдХреЛрдб:

csv_path = str(Path(application_path) / "tmp" / "tmp.csv").replace("\\", "\\\\")
df.to_csv(csv_path, index=False, sep='\t', quotechar="'", na_rep=r'\N')
rq = """LOAD DATA LOCAL INFILE '{file_path}' REPLACE INTO TABLE {db}.{db_table}
        LINES TERMINATED BY '\\r\\n'
        IGNORE 1 LINES
         ({col});
        """.format(db=db,
                   file_path=csv_path,
                   db_table=table_name,
                   col=",".join(df.columns.tolist()))

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЗрд╕реЗ #29636 рдореЗрдВ upsert_ignore рддрд░реНрдХ рдХреЗ рд╕рд╛рде рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЬреЛ #14553 рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИред

рдкрд░рд┐рд╢рд┐рд╖реНрдЯ_рд╕реНрдХрд┐рдкрдбреБрдкреНрд╕ +1

рдкрд░рд┐рд╢рд┐рд╖реНрдЯ_рд╕реНрдХрд┐рдкрдбреБрдкреНрд╕ рдХреЗ рд▓рд┐рдП +1

рд╕рд╣рдордд 'append_skipdupes' рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╣рд╛рдБ рдХреГрдкрдпрд╛ред 'append_skipdupes' рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рди рдХрд┐ рдХреЗрд╡рд▓ рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА рдХреЙрд▓рдо рдХреЗ рд▓рд┐рдПред рдпрджрд┐ рдЕрдиреНрдп рдЕрджреНрд╡рд┐рддреАрдп рд╕реНрддрдВрднреЛрдВ рдореЗрдВ рднреА рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣реИрдВ, рддреЛ рдЙрд╕реЗ рдЙрди рдирдИ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЫреЛрдбрд╝ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдкрд░рд┐рд╢рд┐рд╖реНрдЯ_рд╕реНрдХрд┐рдкрдбреБрдкреНрд╕ рдХреЗ рд▓рд┐рдП +1

рдкрд░рд┐рд╢рд┐рд╖реНрдЯ_рд╕реНрдХрд┐рдкрдбреБрдкреНрд╕ +1

рдкрд░рд┐рд╢рд┐рд╖реНрдЯ_рд╕реНрдХрд┐рдкрдбреБрдкреНрд╕ +1

рдкрд░рд┐рд╢рд┐рд╖реНрдЯ_рд╕реНрдХрд┐рдкрдбреБрдкреНрд╕ рдХреЗ рд▓рд┐рдП +1

рдЗрд╕ рдмреАрдЪ рдЖрдк рдЗрд╕ https://pypi.org/project/pangres/ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

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

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

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

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

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

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

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