J'ai un Dataframe pandas, que j'ai mis en sql avec le code ci-dessous.

code

df = pandas.read_csv(io.StringIO(r))
pandas.DataFrame.to_sql(df, name='Database count details', con=engine)

Exemples de données

UNIQUE id   name          refreshed_at    values
2449205     ABC           2014-01-10      22
26019260    DEF           2016-03-04      51
26019261    GHI (1333)    2016-03-04      0.55

Mes intentions sont d'exécuter un code une fois par semaine et de remplacer les données du fichier .db par les données de cette semaine si le unique id correspond. S'il ne correspond pas, il sera ajouté au fichier .db.

Comment dois-je procéder? Ou existe-t-il une meilleure façon d'effectuer cette tâche?

3
jake wong 6 mars 2016 à 06:13

3 réponses

Meilleure réponse

Il ne semble pas y avoir de fonctionnalité permettant de surmonter cela facilement. Actuellement, je laisse tomber la table entière et en recrée une nouvelle ..

meta = MetaData()
table_to_drop = Table('Database count details', 
                       meta, autoload=True, autoload_with=engine)
table_to_drop.drop(engine)
0
jake wong 6 mars 2016 à 14:14

Supprimez simplement les lignes en conflit avant d'exécuter to_sql. Voici comment je mets à jour les résultats d'une expérience.

from sqlalchemy import select, delete, Table, MetaData
metadata = MetaData(engine)

experiment_name = 'base-20180608'
pipeline_proposals = Table('pipeline_proposals', metadata, autoload=True)
pipeline_proposals.delete().where(pipeline_proposals.c.experiment_name == experiment_name).execute()

proposals["experiment_name"]=experiment_name
proposals.to_sql("pipeline_proposals", con=engine, if_exists='append')
0
Piotr Czapla 8 juin 2019 à 19:23

Pandas.DataFrame.to_sql (df, name = 'Database count details', con = engine, if_exists = 'replace')

Voir le paramètre if_exists pour to_sql sur http: // pandas. pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_sql.html

-2
cpep 14 sept. 2016 à 14:45