Es wird gesagt, dass Pandas DataFrame CSV anwendet, aber von CSV zu DB nur alle Spalten einfügen? Also habe ich eine Funktion zum Aktualisieren (UPDATE) von DataFrame zu DB erstellt.
Zum ersten Mal zuvor habe ich Pandas DataFrame ernsthaft verwendet. Dann wusste ich, dass to_csv plötzlich den Wert von DB in CSV konvertieren konnte und sagte: "Oh, großartig!". .. ..
Was ist dann das Gegenteil? Was ist zum Beispiel, wenn Sie von DB in CSV exportieren möchten und ein externes Tool den CSV-Wert bearbeitet und ihn wiedergibt?
Nun, wenn Sie darüber nachdenken, was denken Sie über Primärschlüssel? Aus diesem Grund unterstützen die allgemeinen Spezifikationen, die von OSS in eine Bibliothek umgewandelt werden, diese nicht. Nun, vielleicht geht es darum, SQL ehrlich anzuwenden.
Also habe ich einen Nischenprozess gemacht.
Prozess zum Aktualisieren, indem Pandas DataFrame, Primärschlüssel und zu aktualisierende Spalten angegeben werden.
Ein Listentyp mit einem Zeichenfolgentyp als Primärschlüssel und mehreren Zeichenfolgen als Aktualisierungszielspaltengruppe. Es fühlt sich an, als würde man SQL erstellen und festschreiben, das den großen Gewinndatensatz mit der als Primärschlüssel angegebenen Zeichenfolge angibt und die anderen Spalten zur Zielspalte von SET of UPDATE macht.
Das war's. Nun, es ist eine besiegte Version, daher gibt es verschiedene Einschränkungen.
・ Der Primärschlüssel besteht aus einer Spalte ・ Verschiedene Spalten sind fest (Primärschlüssel ist Zeichen, andere sind Float) ・ DB ist PostgreSQL · Andere ...
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
#aktualisieren
# I :Zu aktualisierende Daten
#Primärschlüsselspalte
#Zu aktualisierende Spalten
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()
#Schreiben Sie von CSV in 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)
#Export von DB nach 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 ... nicht gut genug. Es gibt ein Gefühl der Niederlage. Lassen Sie uns zu einem späteren Zeitpunkt etwas mehr darüber nachdenken. .. ..
Recommended Posts