使用python的MySQLdb连接到数据库并获取不同的值。在
主类需要数据库中的值个数。为了得到这些值,我编写了单独的类。但在每一个类中,我再次需要来自db的不同值。所以我再次需要连接到数据库并获取值。这似乎不是一个优雅的解决方案。在
1)类之间共享mysql连接的最佳方式是什么?有什么比直接传递连接实例或任何已知模式更通用的方法吗?在
2)每个查询是否需要新的游标对象?或者一个就够了。在
更新:
如果我使用singleton或borg模式只创建一个connection实例,情况会怎样。或者我要像sqlalchemy一样给ORM注射?在
考虑下面的例子:“Main”类依赖于“Foo”和“Bar”。所有三个都需要连接db以获取某些值。在class Bar(object):
def __init__(self):
self.host = "127.0.0.1"
self.username = 'foo'
self.passwd = 'bar'
self.dbname = 'foobar'
def getAge(self, id, name):
query = ...
conn = MySQLdb.connect(self.host, self.username, self.passwd, self.dbname)
cursor = conn.cursor()
cursor.excute(query)
result = cursor.fetchone()
age = result[0]
cursor.close()
del cursor
conn.close()
return age
class Foo(object):
def __init__(self):
self.host = "127.0.0.1"
self.username = 'foo'
self.passwd = 'bar'
self.dbname = 'foobar'
def getName(self, id):
query = ...
conn = MySQLdb.connect(self.host, self.username, self.passwd, self.dbname)
cursor = conn.cursor()
cursor.excute(query)
result = cursor.fetchone()
name = result[0]
cursor.close()
del cursor
conn.close()
return name
class Main(object):
def __init__(self):
self.host = "127.0.0.1"
self.username = 'foo'
self.passwd = 'bar'
self.dbname = 'foobar'
def connect(self):
self.conn = MySQLdb.connect(self.host, self.username, self.passwd, self.dbname)
def getId(self):
query = ...
cursor = self.conn.cursor()
cursor.excute(query)
result = cursor.fetchone()
name = result[0]
cursor.close()
del cursor
return id
def process(self):
self.connect()
id = self.getId()
name = Foo().getName(id)
age = Bar().getAge(id, name)
self.conn.close()
print id, name, age
提前谢谢。在