2017-09-26 16 views
0

SQLALCHEMY経由でMySQLに接続する際に問題を見つけ出すための助けが必要です。 以下は、私が試したものです:SQLALCHEMY経由のMysqlへのPython接続

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() 

上記のスクリプトは完全に正常に動作して所望の出力を返します。次のように私はクラスベースのアプローチをしようとすると、 問題は次のとおりです。

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) 

私は、MySQLと呼ばれるパッケージで上記のクラスをラップ。 main.pyは以下の通りです:

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() 

私が手にエラーがある: 型オブジェクト「Connection_class」は、デバッグには属性「paramstyle」

を持っていない私は、エラーがreturn_connection_object機能から発信ましたどういうわけか、同じ関数がスクリプトとして実行されたときに接続オブジェクトを返している間にnullを返しています。

任意のリードが役立ちます。前もって感謝します。

答えて

0

パッケージに使用している名前はかなり一般的なようで、他のものと矛盾する可能性がありますconnnector。このエラーの原因を取り除くためにインポートしたモジュールとオブジェクトの名前を変更してみてください。

関連する問題