Istnieje metoda DataFrame.to_sql, ale działa ona tylko dla baz danych mysql, sqlite i Oracle. Nie mogę przekazać tej metody połączenia postgres lub silnika sqlalchemy.Jak napisać DataFrame do tabeli postgres?
Odpowiedz
Począwszy od pand 0.14 (wydany koniec maja 2014), obsługiwany jest postgresql. Moduł sql
używa teraz sqlalchemy
do obsługi różnych smaków bazy danych. Możesz przekazać silnik sqlalchemy dla bazy danych postgresql (patrz docs). Np .:
from sqlalchemy import create_engine
engine = create_engine('postgresql://scott:[email protected]:5432/mydatabase')
df.to_sql('table_name', engine)
Masz rację, że w pand do wersji 0.13.1 PostgreSQL nie obsługiwane. Jeśli chcesz użyć starszej wersji pandy, oto poprawiona wersja pandas.io.sql
: https://gist.github.com/jorisvandenbossche/10841234.
Napisałem to jakiś czas temu, więc nie mogę w pełni zagwarantować, że zawsze działa, ale podstawa powinna tam być). Jeśli umieścisz ten plik w katalogu roboczym i zaimportować go, to powinieneś być w stanie to zrobić (gdzie con
jest połączenie PostgreSQL):
import sql # the patched version (file is named sql.py)
sql.write_frame(df, 'table_name', con, flavor='postgresql')
Szybsze opcja:
następujący kod będzie kopiować Pandas DF postgres DB znacznie szybciej niż metoda df.to_sql i nie będziesz potrzebował żadnego pośredniego pliku csv do przechowywania df. Utwórz silnik w oparciu o specyfikacje bazy danych. Utwórz tabelę w DB postgres, która ma taką samą liczbę kolumn jak DataFrame (df). Dane w DF otrzymają wstawiony w swojej tabeli postgres.
from sqlalchemy import create_engine
import psycopg2
import io
engine=create_engine('postgresql+psycopg2://username:[email protected]:port/database')
conn=engine.raw_connection()
cur = conn.cursor()
output = io.StringIO()
df.to_csv(output, sep='\t', header=False, index=False)
output.seek(0)
contents = output.getvalue()
cur.copy_from(output, ‘table_name’, null="") #null values become ''
conn.commit()
- 1. Spark Dataframes UPSERT do Postgres Tabela
- 2. postgres „zwraca tabeli” zwraca łańcuch
- 3. jak używać typu danych geometrii do tabeli postgres?
- 4. Wybieranie danych do tablicy Postgres
- 5. Jak napisać literał tabeli w Oracle?
- 6. Jak napisać procedurę przechowywaną postgres, która niczego nie zwraca?
- 7. jak napisać procedurę wstawiania danych do tabeli w phpmyadmin?
- 8. Jak dodać nową kolumnę do tabeli za drugą lub trzecią kolumną w tabeli, używając postgreS?
- 9. Jak napisać ramkę danych (uzyskaną z tabeli gałęzi) do hadoop SequenceFile i RCFile?
- 10. Jak napisać pandasową ramkę danych do istniejącego modelu Django?
- 11. Wybierz liczbę wierszy w innej tabeli w instrukcji Postgres SELECT
- 12. Jak oszacować rozmiar jednej kolumny w tabeli PostgreS?
- 13. Jak utworzyć kopię zapasową pojedynczej tabeli w bazie danych postgres?
- 14. Konwersja pandy dataframe do dask dataframe
- 15. Tabela pytań do pandy DataFrame
- 16. Jak napisać/odczytać DataFrame Pand z MultiIndex z/do pliku ASCII?
- 17. Indeksowanie PostgreS?
- 18. Jak napisać mapę do paczki?
- 19. Jak napisać strumień do pliku?
- 20. Jak napisać łańcuchy do OutputStream?
- 21. Jak napisać Upsert dla LINQ do SQL?
- 22. Konwersja dataFrame do listy
- 23. jak dodać @ do hibernacji dialektu postgres?
- 24. Wybierz losowy wiersz dla każdej grupy w tabeli postgres
- 25. XML do pand dataframe
- 26. Jak uruchomić serwer Postgres?
- 27. Python SQLAlchemy and Postgres - Jak zapytać o element JSON
- 28. Postgres nie zaakceptuje aliasu tabeli przed nazwą kolumny
- 29. Jak wyeksportować DataFrame do csv w Scala?
- 30. Jak dodać nową kolumnę Struct do DataFrame
Czy to doprowadziło do 0.14? – Quant
Tak, a także 0.15 jest już zwolniony (kandydat do wydania). Zaktualizuję odpowiedź, dziękuję za pytanie. – joris
Ten wpis rozwiązał problem dla mnie: http://stackoverflow.com/questions/24189150/pandas-writing-dataframe-to-other-postgresql-schema – srodriguex