为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

海绵宝宝撒 2023-06-27 18:25:12
我创建了一个名为 Tables 的类,它具有name、ddl和cols属性,我用它们在 MySQL 中创建表。我有一个名为 的所有 Table 对象的列表mylist。我有一个名为 的所有表对象名称的列表tables。我有一个 csv 的剥离文件名列表,我将使用它来将数据加载到名为 的表中list_files。如果in 中的项目与list_filesTable 对象的 in 匹配,我想将 Table 对象中列出的列中的数据插入到关联的 MySQL 表中 - 换句话说,我想使用列表项作为具有匹配名称的 Table 对象。namemylistcols一旦弄清楚如何使用字符串list_files作为现有 Table 对象的名称,我就可以构建 INSERT 语句。到目前为止,这是我的代码:from pathlib import Pathmylist = []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 objectssub_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 stumpedfor filename in list_files:    if filename in tables:        print(filename.cols)这显然不起作用,但我想将其视为filename具有相同名称的 Table 对象,并且不确定正确的方法。
查看完整描述

1 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

您可以创建一个字典将文件名映射到 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] = table


for filename in list_files:

    if filename in tables:

        table = tables[filename]


查看完整回答
反对 回复 2023-06-27
  • 1 回答
  • 0 关注
  • 97 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信