2017-11-29 2 views
-1

Eine einfache Funktion gebaut SQLEs schlägt immer fehl, wenn Tabelle zu löschen oder fallen wird mit sqlalchemy auf postgresql

from sqlalchemy.engine.url import URL 
POOL_RECYCLE = 7200 
POOL_SIZE = 10 
MAX_OVERFLOW = 20 
POOL_TIMEOUT = 30 

class DatabaseConnect(object): 
    def __init__(self, dict_db): 
     self.__config = dict_db 
     self.Engine = create_engine(URL(**self.__config), 
            pool_size=POOL_SIZE, 
            max_overflow=MAX_OVERFLOW, 
            pool_timeout=POOL_TIMEOUT, 
            pool_recycle=POOL_RECYCLE) 
    def db_connect(self): 
     return self.Engine.connect() 

One dict verwendet zum Ausführen Informationen enthalten Datenbank zu verbinden.

DICT_DB_DW_PG_BI = { 
    'drivername': 'postgres', 
    'host': 'xxx', 
    'port': '5432', 
    'database': 'alpha', 
    'username': 'xx', 
    'password': 'xxx'} 

Wenn ich die SQL ausführen, verwende ich die Funktion als erklären:

for i_sql in sql_input.split(';'): 
    engine = self.db_dw_pg_bi.Engine 
    engine.execute(sqlalchemy.text(i_sql)) 

Wenn ich die oben beschriebene Methode verwenden, um die SQL wie unten ausgeführt, wird kein Fehler angezeigt, aber wenn ich das Kontroll Datenbank, habe ich keine Änderungen in der Datenbank gefunden.

delete from test.lxy_norm_user; 
drop table if exists test.lxy_norm_user; 

Antwort

0

Es scheint das Problem auf autocommit zu sein. Ich modifiziere die Teil-3-Methode wie folgt und es funktioniert.
self.db_dw_pg_bi.Engine.execute(sqlalchemy.text(i_sql).execution_options(autocommit=True)),

Verwandte Themen