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.
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.
・ 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 ...
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()
Hmm ... pas assez bien. Il y a un sentiment de défaite. Pensons un peu plus à une date ultérieure. .. ..
Recommended Posts