[英]Help interpreting Python code snippet
我在网上找到了以下内容,但是从我很少接触Python的过程中,我知道一个人可以即时将函数附加到对象上。 我也知道Python中的所有对象都是对象。 我尚未了解以下内容及其用例要实现的目标。 这是我需要帮助的部分:
run_sql_command.c = c
def get_sql_object(c):
def run_sql_command(command, arguments=[]):
c.execute(command, arguments)
return c.fetchall()
run_sql_command.c = c
return run_sql_command
这里的想法(我相信)是有人在创建一个占位符对象,该对象保留对游标c
引用,以便以后可用于执行查询。 提议的用法可能是这样的:
c = DBConnectionObject.cursor()
myExecutor = get_sql_object(c)
# some amount of code later
rows = myExecutor(Queries.GetAllUsersByFName, ['Larry', 'Bob'])
-解决一些意见-
我发现尝试保持游标不停会在不稳定的环境中引起问题,在这种环境中,不能始终保证数据库连接保持连接状态。 我选择这种方法:
class DBConnection(object):
def __init__(self, dbpath):
self.dbPath = dbpath
# Any connection object here, really.
self._conn = kinterbasdb.connect()
def cursor(self, query, params = None):
try:
cursor = self._conn.cursor()
if params:
cursor.execute(query, params)
else:
cursor.execute(query)
return cursor
except (kdb.ProgrammingError, AttributeError), e:
print e
def qry(self, query, params = None):
cursor = self.cursor(query, params)
return [[x[0].title() for x in cursor.description]] + [r for r in cursor.fetchall()]
然后,您将创建一个全局数据库连接,如下所示:
dbcon = DBConnection('/path/to/mydb.fdb')
并使用以下命令运行查询:
rows = dbcon.qry(Queries.GetSomething)
要么:
filtered = dbcon.qry(Queries.FilteredQuery, ['my', 'parameters'])
如果连接断开,我已经省略了一些错误处理/重新连接到数据库的代码,但是总的思路就在那里。 这样,可以在需要,使用和允许游标超出范围时创建游标,从而使我可以集中处理错误。
我认为run_sql_command.c
可以保留对c的可访问引用,例如以后将其关闭。
该行在函数run_sql_command
添加了属性c
,为它提供了传递给函数get_sql_object()
的值get_sql_object()
可能是数据库游标)。 您可能已经很了解。
由于此代码段的范围有限,因此该语句完全没有用。 在较大的上下文中,可以在代码的其他位置重复使用光标。 在代码的其他部分中查找对.c
属性的访问,并查看对它的处理方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.