Jeu à la main Python (CSV est appliqué avec Pandas DataFrame, mais seulement la colonne complète Insérer de CSV à DB?)

Quel est cet article?

On dit que Pandas DataFrame applique CSV, mais de CSV à DB seulement toutes les colonnes Insérer? Donc, j'ai créé une fonction pour mettre à jour (UPDATE) DataFrame vers DB.

Pour la première fois auparavant, j'ai commencé à utiliser Pandas DataFrame sérieusement. Ensuite, j'ai su que to_csv pouvait soudainement convertir la valeur de DB en CSV et j'ai dit: "Oh, génial!". .. ..

Alors, quel est le contraire? Par exemple, que se passe-t-il si vous souhaitez exporter de la base de données vers le CSV et qu'un outil externe modifie la valeur CSV et la reflète à nouveau?

Eh bien, si vous y réfléchissez, que pensez-vous de la clé primaire? Dans cet esprit, les spécifications communes qui sont transformées en bibliothèque par OSS ne la prennent pas en charge. Eh bien, c'est peut-être une histoire d'application honnête de SQL.

Alors, j'ai fait un processus de niche.

En d'autres termes, qu'avez-vous fait?

Processus de mise à jour en donnant à Pandas DataFrame, la clé primaire et les colonnes à mettre à jour.

Un type de liste qui a un type de chaîne de caractères comme clé primaire et plusieurs chaînes de caractères comme groupe de colonnes cible de mise à jour. Cela ressemble à la création et à la validation de SQL qui spécifie le gros enregistrement gagnant avec la chaîne de caractères spécifiée comme clé primaire et fait des autres colonnes la colonne cible de SET of UPDATE.

Eh bien c'est ça. Eh bien, c'est une version vaincue, il y a donc diverses restrictions.

Restrictions

・ La clé primaire se compose d'une colonne ・ Différentes colonnes sont fixes (la clé primaire est le caractère, les autres sont flottantes) ・ DB est PostgreSQL · Autre ...

Achèvement



def get_connection_string():
    hostname = localhost
    port = '5432'
    database = 'db01'
    username = 'user01'
    password = 'manager'
    return f'postgresql://{username}:{password}@{hostname}:{port}/{database}'


def get_cur():
    conn = psycopg2.connect(get_connection_string())
    cur = conn.cursor()
    return conn, cur
    
#mise à jour
# I :Données à mettre à jour
#Colonne de clé primaire
#Colonnes à mettre à jour
def update_data(df, column_key, columns):
    import pandas as pd
    conn, cur = get_cur()

    for i in range(len(df)):
        paras = list()
        col_sqls = list()
        for column in columns:
            paras.append(float(df.at[i, column]))
            col_sqls.append(f' {column} = %s ')
        sql = f'''
            UPDATE
                    RDKIT
            SET
                    {','.join(col_sqls)}
            WHERE
                    SampleName = '{df.at[i, 'samplename']}'
        '''
        print(sql)
        print(paras)
        cur.execute(sql, paras)

    conn.commit()


#Ecrire de CSV à DB
def test05():
    import pandas as pd
    df = pd.read_csv('abc.csv')
    # df = pd.read_csv('edited.csv')

    column_key = 'samplename'
    columns = ['maxestateindex', 'maxabsestateindex', 'heavyatommolwt', 'exactmolwt', 'qed', 'molwt']
    update_data(df, column_key, columns)


#Exporter de DB vers CSV
def test06():
    import pandas as pd

    sql = f'''
        SELECT
                SampleName
              , MaxEStateIndex, MaxAbsEStateIndex, HeavyAtomMolWt, ExactMolWt, qed, MolWt
        FROM
                RDKIT
    '''
    conn, cur = get_cur()
    df = pd.read_sql(sql=sql, con=conn)
    df.to_csv('exported.csv')


def main():
    test05()
    # test06()


if __name__ == '__main__':
    main()

Impressions

Hmm ... pas assez bien. Il y a un sentiment de défaite. Pensons un peu plus à une date ultérieure. .. ..

Recommended Posts

Jeu à la main Python (CSV est appliqué avec Pandas DataFrame, mais seulement la colonne complète Insérer de CSV à DB?)
Jeu à la main Python (Pandas / DataFrame début)
Jeu manuel Python (calcul du descripteur RDKit: SDF en CSV à l'aide de Pandas)
Lisez le fichier CSV avec Python et convertissez-le en DataFrame tel quel
[python] Créer une table de pandas DataFrame vers postgres
Générez une instruction d'insertion à partir de CSV avec Python.
Comment convertir un fichier JSON en fichier CSV avec Python Pandas
[Python] Un mémo pour écrire du CSV verticalement avec Pandas
Python hand play (obtenir les noms de colonnes à partir du fichier CSV)
Conversion de Pandas DataFrame en System.Data.DataTable à l'aide de Python pour .NET
Lire csv avec des pandas python
[Python] Ecrire dans un fichier csv avec Python
Sortie vers un fichier csv avec Python
Convertir la liste en DataFrame avec python
Bulk Insert Pandas DataFrame avec psycopg2
[Bases de la science des données] J'ai essayé d'enregistrer de csv à mysql avec python
[Python] Comment convertir un fichier db en csv
[Python] Qu'est-ce que la série pandas et DataFrame?
python à retenir uniquement avec bonjour, mondes
Convertir de PDF en CSV avec pdfplumber
Fractal pour faire et jouer avec Python
Je veux jouer avec aws avec python
[Python] Ajouter le nombre total de lignes à Pandas DataFrame
[Part1] Scraping avec Python → Organisez jusqu'à csv!
Python> Numéros de sortie de 1 à 100, 501 à 600> Pour csv
Chargez CSV avec des pandas et jouez avec Index
Comment insérer par lots un fichier CSV vers un hyperfichier Tableau avec la commande COPY de type PostgreSQL