Ho i miei dati caricati da file excel ed organizzati per quanto pitone dict dove ogni chiave è il nome della tabella del database e il suo valore è definito come la lista dei dizionari (le righe)Come caricare i dati in tabelle di database esistenti, usando sqlalchemy?
system_data = {table_name1:[{'col_1':val1, 'col2': val1...},
{'col_1':val2, 'col2': val2..}..],
table_name2:[{},{}..],[{},{}..]..}
Questi dati devono essere caricati in esistenti database durante il prelievo di chiavi table_names
e valori da system_data
.
Inoltre, utilizzo la lista order_table che ho creato in ordine specifico per evitare problemi con FK durante il caricamento dei dati.
Ecco il codice (una delle versioni 1000 che ho provato):
from sqlalchemy import create_engine
from sqlalchemy.sql import insert
def alchemy_load():
system_data = load_current_system_data()
engine = create_engine('mysql+pymysql://username:[email protected]/my_db')
conn = engine.connect()
for table_name in ordered_tables:
conn.execute(insert(table_name, system_data[table_name]))
print("System's Data successfully loaded into Database!")
Questa funzione produrrà un errore seguente:
"TypeError: 'method' object is not iterable"
ho sprecato quasi tutto il giorno su questo roba (((
Tutti gli esempi in linea descrivono la situazione in cui un utente utilizza MetaData e crea le proprie tabelle ... Non c'è nulla su come aggiungere effettivamente dati a tabelle esistenti.
C'è una soluzione al mio problema usando la libreria "dataset".
Il codice:
import dataset
def current_data():
db = dataset.connect(url='mysql+pymysql://user:[email protected]/my_db')
system_data = load_current_system_data()
for table_name in ordered_tables:
db[table_name].insert_many(system_data[table_name])
print("System's Data successfully loaded into Database!")
MA, non ho idea di come implementare questo codice utilizzando sqlalchemy ...
Qualsiasi aiuto sarà apprezzato.
Si dovrebbe guardare agli esempi che utilizzano gli oggetti della tabella SQLalchemy sullo stack overflow. –
Già fatto questo, ci sono un sacco di esempi "statici", dove si crea una tabella e quindi si caricano i dati. Inoltre ci sono decine di tutorial "copia/incollati" su Internet, che sono in realtà gli stessi. Penso di poter implementare questo utilizzando l'API del driver diretto, come MySQLdb o PyMySQL ... Ma come posso farlo funzionare con SQLalchemy? Potresti fornire uno snippet di codice o semplicemente correggere il mio codice? Grazie. – bravoelf
se hai dati csv può essere facilmente portato in mysql. se deve essere in sqlalchemy, si crea una nicchia di aiuto più piccola. così è la condizione di coloro che usano orms e sono bloccati nella loro trappola di colla. – Drew