Comment écrire DataFrame de postgres table?
Il est DataFrame.to_sql méthode, mais il ne fonctionne que pour mysql, sqlite, oracle et les bases de données. Je ne peux pas passer à cette méthode postgres connexion ou de sqlalchemy moteur.
Vous devez vous connecter pour publier un commentaire.
À partir de pandas 0.14 (sorti fin Mai 2014), postgresql est pris en charge. Le
sql
module utilise maintenantsqlalchemy
de soutien de base de données différent de saveurs. Vous pouvez passer une sqlalchemy moteur de base de données postgresql (voir docs). E. g.:Il est exact que dans les pandas jusqu'à la version 0.13.1 postgresql n'a pas été pris en charge. Si vous avez besoin d'utiliser une ancienne version de pandas, voici une version corrigée de
pandas.io.sql
: https://gist.github.com/jorisvandenbossche/10841234.J'ai écrit cela il y a un temps, donc ne peut pas garantir qu'elle fonctionne toujours, buth la base devrait être là). Si vous placez ce fichier dans votre répertoire de travail et l'importer, alors vous devriez être en mesure de le faire (d'où
con
est une connexion postgresql):Sqlalchemy engine
, puis-je utiliser unePostgres
de connexion créés à l'aide depsycopg2.connect()
?Option plus rapide:
Le code suivant va copier votre Pandas DF pour postgres DB beaucoup plus rapide que la df.to_sql méthode et vous n'aurez pas besoin d'un intermédiaire fichier csv pour stocker le df.
Créer un moteur basé sur votre DB spécifications.
Créer une table dans votre postgres DB qui a le même nombre de colonnes que le Dataframe (df).
Données dans le DF obtiendrez inséré dans votre postgres table.
si vous souhaitez remplacer le tableau, on peut la remplacer par de la normale to_sql méthode utilisant les en-têtes de nos df, puis charger la totalité du gros temps df en DB.
contents
faire? Cela devrait-il être celui qui est écrit danscopy_from()
?contents
variable, tout le reste devrait fonctionner parfaitementoutput.seek(0)
?Pandas 0.24.0+ solution
Dans les Pandas 0.24.0 une nouvelle fonctionnalité a été introduite spécifiquement conçu pour les écritures rapides à Postgres. Vous pouvez en apprendre plus à ce sujet ici: https://pandas.pydata.org/pandas-docs/stable/user_guide/io.html#io-sql-method
method='multi'
option est assez rapide. Mais oui, ceCOPY
méthode est le moyen le plus rapide maintenant.with
est écrit dans une mémoire tampon. La dernière partie de lawith
est à l'aide d'une instruction SQL et profitant de copy_expert de la vitesse de charger les données en masse. Qu'est-ce que la partie centrale qui commence aveccolumns =
faire?C'est la façon dont je l'ai fait.
Il peut être plus rapide car il utilise
execute_batch
:Pour Python 2.7 et les Pandas 0.24.2 et à l'aide de Psycopg2
Psycopg2 Module De Connexion
Se connecter à la base de données
En supposant dataframe d'être présent déjà que df