我对这个问题有两个部分。我将它们一起发布是因为我觉得第二个方面可能会影响第一个方面。
问题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的新手,所以我很感谢您可以为此提供的任何建议。