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

我创建了一个名为 Tables 的类,它具有nameddlcols属性,我用它们在 MySQL 中创建表。

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

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

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

如果in 中的项目与list_filesTable 对象的 in 匹配,我想将 Table 对象中列出的列中的数据插入到关联的 MySQL 表中 - 换句话说,我想使用列表项作为具有匹配名称的 Table 对象。namemylistcols

一旦弄清楚如何使用字符串list_files作为现有 Table 对象的名称,我就可以构建 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具有相同名称的 Table 对象,并且不确定正确的方法。


海绵宝宝撒
浏览 98回答 1
1回答

幕布斯6054654

您可以创建一个字典将文件名映射到 Table 对象: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] = tablefor filename in list_files:    if filename in tables:        table = tables[filename]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python