J'ai un bloc de données, actuellement sous la forme d'une liste de n-tuples mais le format est assez flexible, que j'aimerais ajouter à une table Postgres - dans ce cas, chaque n-tuple correspond à une ligne dans le DB. Ce que je faisais jusqu'ici est d'écrire tout ceci dans un fichier CSV, puis d'utiliser COPY de postgres pour charger tout cela dans la base de données. Cela fonctionne, mais est sous-optimal, je préférerais pouvoir faire tout cela directement à partir de python. Existe-t-il une méthode à l'intérieur de python pour répliquer la charge en bloc de type COPY dans Postgres?Recréer Postgres COPIER directement en Python?
17
A
Répondre
45
Si vous utilisez le pilote psycopg2, les curseurs offrent une fonction copy_to
et copy_from
qui peut lire de tout objet de type fichier (y compris un tampon StringIO
).
Il existe des exemples dans les fichiers examples/copy_from.py et examples/copy_to.py qui sont livrés avec le psycopg2 source distribution.
Cet extrait est tiré de l'copy_from.py
exemple:
conn = psycopg2.connect(DSN)
curs = conn.cursor()
curs.execute("CREATE TABLE test_copy (fld1 text, fld2 text, fld3 int4)")
# anything can be used as a file if it has .read() and .readline() methods
data = StringIO.StringIO()
data.write('\n'.join(['Tom\tJenkins\t37',
'Madonna\t\N\t45',
'Federico\tDi Gregorio\t\N']))
data.seek(0)
curs.copy_from(data, 'test_copy')
Questions connexes
- 1. Copier une table (y compris les index) dans postgres
- 2. copier plusieurs fichiers en python
- 3. python postgres cursor timestamp issue
- 4. Comment copier une image distante en python?
- 5. Recréer "presentModalViewController"?
- 6. Postgres: base de données entière claire avant de recréer/repeupler à partir du script bash
- 7. Comment écrire directement dans un corps de requête en Python
- 8. comment copier en profondeur une file d'attente en python
- 9. Postgres Tuning
- 10. Copier des valeurs d'un dictionnaire dans un objet en Python
- 11. Copier les fichiers dans le dossier d'un répertoire en python
- 12. Réplication Postgres
- 13. php - recréer un tableau?
- 14. Postgres: Convertir varchar en texte
- 15. django, postgres 8.4, psycopg 2.2.2, python 2.7, mod_wsgi
- 16. Interface Python vers Postgres avec des instructions réellement préparées?
- 17. Recréer UIView.frame pour le déplacer
- 18. Stocker et recréer des relations dans Access
- 19. Comment demander une url authentifiée directement avec python
- 20. Problème avec Postgres ALTER TABLE
- 21. Python: lire l'entrée de l'utilisateur directement à partir de l'invite
- 22. Windows 7 recréer mes .exes
- 23. Affaire Postgres
- 24. Traitement d'image Python d'image directement à partir du web
- 25. Postgres csv importation erreur de clé en double?
- 26. Fractionnement un intervalle en semaines Postgres
- 27. Mémoire insuffisante avec Postgres en Java
- 28. Erreur Postgres (Obtenir PLJava mis en place)
- 29. Suppression des lignes en double dans Postgres
- 30. Postgres - mémoire insuffisante sur l'insertion en boucle
Mon plaisir ... si ça marche pour vous, ne pas oublier de cliquer sur le bouton accepter pour cette réponse. J'ai remarqué que vous n'avez accepté aucune des réponses à vos autres questions, mais la coche «Accepter» aide les autres personnes ayant le même problème à savoir d'un coup d'œil quelle réponse a résolu le problème pour vous. –
Désolé, je n'avais même pas remarqué les coches avant :) – geoffjentry
S'il vous plaît modifier ceci pour inclure les booléens et les tableaux car ceux-ci ne semblent pas fonctionner pour moi! –