Postgres 9.6.1, sqlachemy 1.1.4, और psycopg2 2.6.2 का उपयोग करना:
-
अपनी डेटा संरचना को एक शब्दकोश में बदलें। पंडों से यह है
import pandas from sqlalchemy import MetaData from sqlalchemy.dialects.postgresql import insert import psycopg2 # The dictionary should include all the values including index values insrt_vals = df.to_dict(orient='records')
-
sqlalchemy के माध्यम से डेटाबेस से कनेक्ट करें। इसके बजाय नीचे psycog2 ड्राइवर और देशी COPY फ़ंक्शन आज़माएं, जो सभी पोस्टग्रेज़ इंडेक्सिंग को बायपास करता है।
csv_data = os.path.realpath('test.csv') con = psycopg2.connect(database = 'db01', user = 'postgres') cur = con.cursor() cur.execute("\copy stamm_data from '%s' DELIMITER ';' csv header" % csv_data) con.commit()
-
निष्पादित करें
results = engine.execute(do_nothing_stmt) # Get number of rows inserted rowcount = results.rowcount
चेतावनी:
यह तरीका NaT
. के साथ काम नहीं करता है बॉक्स से बाहर है।
सब कुछ एक साथ
tst_df = pd.DataFrame({'colA':['a','b','c','a','z', 'q'],
'colB': pd.date_range(end=datetime.datetime.now() , periods=6),
'colC' : ['a1','b2','c3','a4','z5', 'q6']})
insrt_vals = tst_df.to_dict(orient='records')
engine = sqlalchemy.create_engine("postgresql://user:[email protected]/postgres")
connect = engine.connect()
meta = MetaData(bind=engine)
meta.reflect(bind=engine)
table = meta.tables['tstbl']
insrt_stmnt = insert(table).values(insrt_vals)
do_nothing_stmt = insrt_stmnt.on_conflict_do_nothing(index_elements=['colA','colB'])
results = engine.execute(do_nothing_stmt)
चरण 2 और 3 के बजाय psycog2
. का उपयोग करके पोस्टग्रेज में कॉपी कमांड वाला ड्राइवर बड़ी फाइलों (गिग के करीब) के लिए तेज होता है क्योंकि यह सभी टेबल इंडेक्सिंग को बंद कर देता है।
csv_data = os.path.realpath('test.csv')