Come posso eseguire l'intero file sql nel database utilizzando SQLAlchemy? Nel file possono essere presenti molte query SQL differenti, tra cui begin e commit/rollback.Esegui SQL da file in SQLAlchemy
risposta
Purtroppo non sono a conoscenza di una buona risposta generale per questo. Alcuni dbapi (psycopg2 per esempio) supportano l'esecuzione di molte affermazioni alla volta. Se i file non sono enormi, puoi semplicemente caricarli in una stringa ed eseguirli su una connessione. Per gli altri, proverei ad usare un client da riga di comando per quel db e inserire i dati in quello usando il modulo subprocess.
Se questi approcci non sono accettabili, è necessario procedere e implementare un parser SQL piccolo in grado di suddividere il file in istruzioni separate. Questo è davvero difficile da ottenere corretto al 100%, poiché dovrai considerare le regole di escape letterale specifiche del dialetto del database, il set di caratteri utilizzato, tutte le opzioni di configurazione del database che influiscono sull'analisi letterale (ad esempio PostgreSQL standard_conforming_strings).
Se hai solo bisogno di ottenere questo 99,9% corretto, allora qualche magia di regexp dovrebbe farti arrivare quasi tutto lì.
Se si utilizza sqlite3 ha un'estensione utile per dbapi chiamato conn.executescript (str), l'ho collegato tramite qualcosa di simile e sembrava funzionare: (Non tutto il contesto è mostrato ma dovrebbe essere abbastanza per ottenere la deriva)
def init_from_script(script):
Base.metadata.drop_all(db_engine)
Base.metadata.create_all(db_engine)
# HACK ALERT: we can do this using sqlite3 low level api, then reopen session.
f = open(script)
script_str = f.read().strip()
global db_session
db_session.close()
import sqlite3
conn = sqlite3.connect(db_file_name)
conn.executescript(script_str)
conn.commit()
db_session = Session()
Questo puro male mi chiedo? Ho cercato invano un equivalente sqlalchemy "puro", forse che potrebbe essere aggiunto alla libreria, qualcosa come db_session.execute_script (file_name)? Spero che db_session funzionerà bene dopo tutto questo (cioè non c'è bisogno di riavviare il motore) ma non sono ancora sicuro ... ulteriori ricerche necessarie (cioè abbiamo bisogno di ottenere un nuovo motore o solo una sessione dopo essere tornati alle spalle di sqlalchemy ?)
FYI sqlite3 include una routine correlato: sqlite3.complete_statement (SQL) se si tira il proprio parser ...
sono stato in grado di eseguire sql file di schema utilizzando SQLAlchemy pura e alcune manipolazioni di stringhe. Sicuramente non è un approccio elegante, ma funziona.
# Open the .sql file
sql_file = open(<file.sql>,'r')
# Create an empty command string
sql_command = ''
# Iterate over all lines in the sql file
for line in sql_file:
# Ignore comented lines
if not line.startswith('--') and line.strip('\n'):
# Append line to the command string
sql_command += line.strip('\n')
# If the command string ends with ';', it is a full statement
if sql_command.endswith(';'):
# Try to execute statemente and commit it
try:
session.execute(text(sql_command))
session.commit()
# Assert in case of error
except:
print('Ops')
# Finally, clear command string
finally:
sql_command = ''
Iterizza su tutte le righe in un file .sql ignorando le righe commentate. Quindi concatena le righe che formano un'istruzione completa e tenta di eseguire l'istruzione. Hai solo bisogno di un gestore di file e un oggetto di sessione.
- 1. Esegui file SQL in Perl
- 2. Esegui file SQL da Spring JDBC Template
- 3. Esegui SQL da nHibernate
- 4. da SQL prima al pallone-sqlalchemy
- 5. Esegui SQL su file CSV tramite JDBC
- 6. Esegui query SQL con Elixir
- 7. Chef Powershell Esegui da file
- 8. Esegui tutti i file SQL in una directory
- 9. Esegui il file .sql in Python con MySQLdb
- 10. Come utilizzare "ordine composto da" in sqlalchemy
- 11. Esegui script SQL Server
- 12. Esegui file batch da Delphi IDE
- 13. Esegui file .jar da un programma Java
- 14. Esegui file .bat da Excel VBA Macro
- 15. discarica csv da sqlalchemy
- 16. Esegui istruzioni DB dal file
- 17. SQLite - Esegui lo script SQL multilinea dal file?
- 18. Esegui file .pkg in Linux
- 19. Esegui file APK in Eclipse
- 20. esegui file bat in background
- 21. Carica file rake ed esegui attività da altri file
- 22. Esegui la stored procedure dal file batch
- 23. Esegui script SQL dall'applicazione C# su domini
- 24. Esegui il file batch in vb.net?
- 25. Esegui Rsync da Python
- 26. Elixir/SQLAlchemy equivalente all'istruzione SQL "LIKE"?
- 27. Esegui spark SQL su CHD5.4.1 NoClassDefFoundError
- 28. connettersi a SQL Server utilizzando SQLAlchemy
- 29. NHibernate - Esegui SQL per popolare DTO
- 30. SQLAlchemy sottoquery in da clausola senza join