免责声明:这个问题与家庭作业有关。我并不期待一个解决方案,但我希望更好地理解所要求的内容以及这个家庭作业练习的(可能的)效用。
这个问题是在关于使用 Python 的 MySQLdb 模块以及如何更好地表示结果集(可能还有它的行)而不是元组的元组(MySQLdb 的默认设置)的课程之后提出的。
问题是:修改classFactory.py源码,让build_row函数返回的DataRow类多了一个方法:
retrieve(self, curs, condition=None)
self 是(像往常一样)正在调用其方法的实例,curs 是现有数据库连接上的数据库游标,条件(如果存在)是条件字符串,所有接收的行都必须为真。检索方法应该是一个生成器,产生结果集的连续行,直到它完全耗尽。每行都应该是 DataRow 类型的新对象。
def build_row(table, cols):
"""Build a class that creates instances of specific rows"""
class DataRow:
"""Generic data row class, specialized by surrounding function"""
def __init__(self, data):
"""Uses data and column names to inject attributes"""
assert len(data)==len(self.cols)
for colname, dat in zip(self.cols, data):
setattr(self, colname, dat)
def __repr__(self):
return "{0}_record({1})".format(self.table, ", ".join(["{0!r}".format(getattr(self, c)) for c in self.cols]))
DataRow.table = table
DataRow.cols = cols.split()
return DataRow
- 在函数定义中创建类的目的是什么?这通常由专业开发人员完成吗?如果是这样,有什么好处?
- 为什么数据库游标是
retrieve
方法的(显式)参数?数据库游标不应该在这个脚本的范围之外被引用(当建立数据库连接时)? - 是否正确地说(当前)该
build_row
函数将接受两个参数 -table
和cols
- 并返回一个可能看起来像(例如)“exampleTable_record(fieldA,fieldB,fieldC)”的字符串? - 成功添加
retrieve
方法后,我build_row
现在应该返回什么?
正如我之前提到的,如果我知道为什么要求我添加该retrieve
方法,那么我可能会更好地了解如何解决这个问题。