2017-09-26 2 views
0

Benötigen Sie Hilfe, um ein Problem bei der Verbindung zu MySQL über SQLALCHEMY herauszufinden. Unten ist das, was ich versucht:Python-Verbindung zu Mysql über SQLALCHEMY

from sqlalchemy import create_engine 
import pandas 

def return_connection_string(database_name, database_user, database_password, database_host, database_port): 
    try: 
     connection_string = 'mysql+mysqlconnector://' + database_user + ':' + database_password + '@' + database_host + ':' + database_port + '/' + database_name 
     print(connection_string) 
     return connection_string 
    except Exception as e: 
     print('Encountered error while generating connection string for MySQL!') 
     print(e) 

def return_connection_object(database_name, database_user, database_password, database_host, database_port): 
    try: 
     connection_string = return_connection_string(database_name, database_user, database_password, database_host, database_port) 
     engine = create_engine(connection_string).connect() 
     return engine 
    except Exception as e: 
     print('Encountered error while connecting to MySQL database!') 
     print(e) 


mysql_conn = return_connection_object('db_name', 'db_user', 'db_pass', 'xyz.abc.com', '4100') 


df = pandas.read_sql_query('select distinct table_name from information_schema.tables', mysql_conn) 
print(df.shape) 


mysql_conn.close() 

Das obige Skript perfekt funktioniert gut und gibt die gewünschte Ausgabe. Das Problem ist, wenn ich eine Klasse basierten Ansatz versuchen wie folgt:

from sqlalchemy import create_engine 
import logging 


class Connection_class(object): 

    def __init__(self): 
     pass 

    def return_connection_string(self, database_name, database_user, database_password, database_host, database_port): 
     try: 
      connection_string = 'mysql+mysqlconnector://' + database_user + ':' + database_password + '@' + database_host + ':' + database_port + '/' + database_name 
      print(connection_string) 
      return connection_string 
     except Exception as e: 
      print('Encountered error while generating connection string for MySQL!') 
      print(e) 

    def return_connection_object(self, database_name, database_user, database_password, database_host, database_port): 
     try: 
      connection_string = self.return_connection_string(database_name, database_user, database_password, database_host, database_port) 
      engine = create_engine(connection_string).connect()    
      return engine 
     except Exception as e: 
      print('Encountered error while connecting to MySQL database!') 
      print(e) 

ich die obige Klasse in einem Paket mysql genannt gewickelt. Die main.py ist wie folgt:

from mysql import connector 
import pandas 

mysql_obj = connector() 
mysql_conn = mysql_obj.return_connection_object('db_name', 'db_user', 'db_pass', 'xyz.abc.com', '4100') 


df = pandas.read_sql_query('select distinct table_name from information_schema.tables', mysql_conn) 

mysql_conn.close() 

Der Fehler, den ich bekommen ist: Typ Objekt ‚Connection_class‘ hat kein Attribut ‚paramstyle‘

Auf Debuggen fand ich den Fehler von return_connection_object Funktion stammt, Irgendwie gibt es null zurück, während die exakt gleiche Funktion ein Verbindungsobjekt zurückgibt, wenn es als Skript ausgeführt wird.

Alle Leads wären hilfreich. Danke im Voraus.

Antwort

0

Der Name, den Sie für das Paket verwenden, scheint ziemlich generisch und kann mit einigen anderen connnector Konflikt. Versuchen Sie vielleicht, Ihr importiertes Modul und Objekt umzubenennen, um diese mögliche Fehlerquelle zu beseitigen.

Verwandte Themen