Python:遍历字符串列表并将它们与类对象关联

Python:遍历字符串列表并将它们与类对象关联,python,class,Python,Class,我创建了一个名为Tables的类,该类具有name、ddl和cols属性,我使用这些属性在MySQL中创建表 我有一个名为mylist的所有表对象的列表 我有一个名为tables的所有表对象名称的列表 我有一个csv的剥离文件名列表,我将使用它将数据加载到名为list\u files的表中 如果list\u files中的一个项与mylist中的表对象的name相匹配,我想将表对象的cols中列出的列中的数据插入到相关联的MySQL表中——换句话说,我想将列表项用作具有匹配名称的表对象 一旦我知

我创建了一个名为Tables的类,该类具有
name
ddl
cols
属性,我使用这些属性在MySQL中创建表

我有一个名为
mylist
的所有表对象的列表

我有一个名为
tables
的所有表对象名称的列表

我有一个csv的剥离文件名列表,我将使用它将数据加载到名为
list\u files
的表中

如果
list\u files
中的一个项与
mylist
中的表对象的
name
相匹配,我想将表对象的
cols
中列出的列中的数据插入到相关联的MySQL表中——换句话说,我想将列表项用作具有匹配名称的表对象

一旦我知道如何使用
list\u files
中的字符串作为现有表对象的名称,我就可以构建INSERT语句

以下是我目前的代码:

from pathlib import Path

mylist = []

class Table:

    table_list = mylist

    def __init__(self, name, ddl):
        self.name = name
        self.ddl = ddl
        self.cols = []
        self.skip_id = False  # indicates whether to skip the AUTO_INCREMENT '_id'
        # column on import/update

    def add_to_list(self, table_list):
        table_list.append(self)

    def add_cols(self):
        text = self.ddl.split('`')
        self.cols = text[3::2]

    def skip_auto_inc_id(self):
        if 'AUTO_INCREMENT' in self.ddl:
            self.skip_id = True


# 2 example Table objects
sub_leagues = Table('sub_leagues', '''CREATE TABLE IF NOT EXISTS `sub_leagues` (
  `subl_id` INT PRIMARY KEY,
  `league_id` INT,
  `sub_league_id` INT,
  `name` VARCHAR(50),
  )
   ENGINE=InnoDB DEFAULT CHARSET=latin1''')
sub_leagues.add_to_list(mylist)

divisions = Table('divisions', '''CREATE TABLE IF NOT EXISTS `divisions` (
  `d_id` INT AUTO_INCREMENT PRIMARY KEY,
  `league_id` INT,
  `sub_league_id` INT,
  `division_id` INT,
  `name` VARCHAR(50),
  `gender` INT
  )
   ENGINE=InnoDB DEFAULT CHARSET=latin1''')
divisions.add_to_list(mylist)

tables = []
for table in mylist:
    table.add_cols()
    table.skip_auto_inc_id()
    if table.skip_id:
        table.cols = table.cols[1:]
    tables.append(table.name)

files = ['sub_leagues.csv', 'divisions.csv']

list_files = []

for file in files:
    filename = Path(file).stem
    list_files.append(filename)

#  This is where I'm stumped
for filename in list_files:
    if filename in tables:
        print(filename.cols)

这显然不起作用,但我想将
filename
视为具有相同名称的表对象,并且不确定正确的方法。

您可以制作一个字典,将文件名映射到表对象:

tables = {}
for table in mylist:
    table.add_cols()
    table.skip_auto_inc_id()
    if table.skip_id:
        table.cols = table.cols[1:]
    tables[table.name] = table

for filename in list_files:
    if filename in tables:
        table = tables[filename]