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

Postgresql ПРИ КОНФЛИКТ в sqlalchemy

Използване на Postgres 9.6.1, sqlachemy 1.1.4 и psycopg2 2.6.2:

  1. Преобразувайте вашата структура от данни в речник. От Pandas е

    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')
    
  2. Свържете се с база данни чрез sqlalchemy. Вместо това опитайте драйвера psycog2 отдолу и собствената функция COPY, която заобикаля цялото индексиране на postgres.

    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()
    
  3. Изпълнение

    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 драйверът с командата за копиране в postgres е по-бърз за по-големи файлове (наближаващи гиг), защото изключва цялото индексиране на таблицата.

csv_data = os.path.realpath('test.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. Начини за достъп до Oracle Database в PostgreSQL

  2. Вземете резултат от заявка в изявление DO

  3. Разбиране на растерни индекси в postgresql

  4. Искам да възстановя базата данни с различна схема

  5. Множество синонимни речникови съвпадения при търсене в пълен текст