Python通过SQLALCHEMY连接到Mysql

时间:2017-09-26 07:02:21

标签: python-3.x sqlalchemy

在通过SQLALCHEMY连接MySQL时需要帮助解决问题。 以下是我的尝试:

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,而完全相同的函数在作为脚本运行时返回连接对象。

任何线索都会有所帮助。提前谢谢。

1 个答案:

答案 0 :(得分:0)

您用于该程序包的名称似乎非常通用,可能与其他connnector冲突。可以尝试重命名导入的模块和对象,以消除这种可能的错误来源。