<p>下面是代码的重构版本。在不知道数据库模式、它包含什么或有示例文件可供测试的情况下,这只是您可以做的工作的近似值。由于<code>VOLUNTEERS</code>表继续添加或删除列,您只需更改代码顶部的<code>COLUMNS</code>元组即可补偿更改。你知道吗</p>
<pre><code>import contextlib
import sqlite3
DATABASE = 'VOL_HOURS.db'
OUTPUT = 'VHOURS.nmf'
COLUMNS = ('BOB', 'DAVE', 'CAROL', 'ANDY', 'CARL', 'DANNY', 'CHERYL',
'CYNTHIA', 'TARA', 'SCOTT', 'ASHLEY', 'CRYSTAL')
def main():
with open(OUTPUT, 'w') as file:
for row in from_volunteers():
file.write(str(VolunteerList.new(row)))
def from_volunteers():
with sqlite3.connect(DATABASE) as connection:
with contextlib.closing(connection.cursor()) as cursor:
query = 'SELECT {} FROM VOLUNTEERS'.format(', '.join(COLUMNS))
cursor.execute(query)
return cursor.fetchall()
class VolunteerList:
@classmethod
def new(cls, row):
obj = cls()
for key, value in zip(COLUMNS, row):
obj[key] = value
return obj
def __init__(self):
self.__data = [''] * len(COLUMNS)
def __setitem__(self, key, value):
self.__data[COLUMNS.index(key.upper())] = value
def __str__(self):
return ','.join(['VLIST'] + self.__data + ['\n'])
if __name__ == '__main__':
main()
</code></pre>