2017-09-26 90 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相冲突。可以尝试重命名你的模块和导入的对象,以消除这种可能的错误来源。