Je travaille sur PostgreSQL et psycopg2. Essayer pour obtenir des données de flux qui est mis à jour tous les 10 minutes et conserver ce contenu dans la base de données PostgreSQL. Mon objectif est de récupérer et d'imprimer ces données à partir de cette table. Mais face au problème que les données en double sont également stockées dans la base de données chaque fois que je cours ce script en raison de l'opération d'insertion sur la table.Éviter les données dupliquées dans la base de données PostgreSQL en Python
Pour sortir de ce problème, j'ai fait la contrainte de clé primaire de la colonne location_title
dans la table Locations-musiq1
où j'ai l'intention de stocker mes données de flux.Mais face à l'erreur.
Voici mon code:
import psycopg2
import sys
import feedparser
import codecs
import psycopg2.extensions
# Parsing data from Geofeed location feeds
data = feedparser.parse("some URL")
psycopg2.extensions.register_type(psycopg2.extensions.UNICODE)
try:
conn=psycopg2.connect("dbname='name' user='postgres' host='localhost' password='abcds'")
conn.set_client_encoding('UNICODE')
except:
print "I am unable to connect to the database, exiting."
sys.exit()
cur=conn.cursor()
for i in range(len(data['entries'])):
cur.execute("INSERT INTO locations_musiq1(location, location_title) VALUES (%s, %s)", (data.entries[i].title,data.entries[i].summary))
conn.commit()
cur.execute("SELECT * FROM locations_musiq1;")
cur.fetchone()
for row in cur:
print ' '.join(row[1:])
cur.close()
conn.close()
Mon erreur après avoir changé "locations_musiq1" tables colonne "location_title" comme clé primaire est:
Traceback (most recent call last): File "F:\JavaWorkspace\Test\src\postgr_example.py", line 28, in cur.execute("INSERT INTO locations_musiq1(location, location_title) VALUES (%s, %s)", (data.entries[i].title,data.entries[i].summary)) psycopg2.IntegrityError: duplicate key value violates unique constraint "locations_musiq1_pkey"
Quelqu'un peut-il avoir une idée de sortir de cette problème? .. Merci d'avance ..
Merci pour la réponse .. Mais je face à problème comme les données d'alimentation ne sont pas l'impression en série, ils supposés imprimer .. Comme ils montrent des données (partie de mes données de sortie de script):! X était à Londres (à 2010-03-10 14: 46: 35.0) X était à Londres (au 2010-03-10 15: 30: 35.0) X était à Londres (à 2010-03-10 15: 19: 35.0) X était à Londres (au 2010-03-10 15: 08: 35,0 X était à Londres (au 2010-03-10 14: 57: 38,0) X était à Londres (au 2010-03-10 14: 24: 35.0) Donc, vous voyez que tous ceux qui ne sont pas apparaissent en série, mais ils supposent apparaître en série! Avez-vous une idée à ce sujet pour obtenir tout cela en série ??!? –
Une fois que vous les avez insérés dans la base de données, utilisez simplement un select de l'ordre emplacements_musiq1 de mydatefield asc' (ou desc) – ChristopheD