在python3中的各个模块之间共享数据库连接,并处理许多数据库查询

时间:2018-06-22 14:59:05

标签: python python-3.x pyodbc

我对这个问题有两个部分。我将它们一起发布是因为我觉得第二个方面可能会影响第一个方面。

问题1: 我觉得我一定疯了或者不能充分使用Google,因为我似乎找不到任何有关如何创建一个类来管理数据库连接,然后允许其他模块轻松利用该类进行连接的良好信息。

我目前有我的main.py,然后是一个lib目录,其中有一个database.py文件。设置如下:

import pyodbc


class Database(object):
    server = None
    database = None
    conn = None
    cursor = None

def __init__(self):
    print('instantiating db object')
    self.server = 'my_server'
    self.database = 'my_db'


    if self.conn is None:
        self.connect()

def connect(self):
    if self.conn is not None:
        return self.conn
    else:
        try:
            self.conn = pyodbc.connect(
                'DRIVER={SQL Server Native Client 11.0};SERVER=' + self.server + ';DATABASE=' + self.database + ';Trusted_Connection=yes;')
            return self.conn
        except pyodbc.Error as e:
            print(e)
            return False

def query(self, sql, params=None):
    self.cursor = self.conn.cursor()
    if params is not None:
        return self.cursor.execute(sql, params)
    else:
        return self.cursor.execute(sql)

def close_cursor(self):
    self.cursor.close()

def close_conn(self):
    self.conn.close()

(我认为)我只想打开1个连接并在以后的所有调用中利用该连接,因此在main.py文件中,我正在这样做:

db_conn = db.Database()

然后我使用依赖注入将连接发送到其他类吗?例如,我有一个使用api的类,所以当我调用它时,是否要传递数据库连接?

api = api.Api(api_details, db_conn)

然后在api类中使用db_conn运行查询?

我知道全局变量是邪恶的,但是在一个完美的世界中,我可以想象在主应用程序级别建立DB连接,并使整个应用程序中的所有对象都可以访问它。

这带我去...

问题2: 我在公司内部构建的东西基本上是一个框架,可以动态连接到各种API,并使用每个API执行各种任务。我可能会连接到4个不同的API,并对每个API进行数千次调用。我在构建它时还很早,但是我担心速度会成为一个问题,前面提到的数据库问题很可能会影响到这个问题。建立多个连接是否更好?我需要使用多线程吗?如果是这样,关于学习如何使用Python3的任何好的建议?

我是python的新手,所以我很感谢您可以为此提供的任何建议。

0 个答案:

没有答案