我創(chuàng)建了一個(gè)名為 Tables 的類,它具有name、ddl和cols屬性,我用它們?cè)?MySQL 中創(chuàng)建表。我有一個(gè)名為 的所有 Table 對(duì)象的列表mylist。我有一個(gè)名為 的所有表對(duì)象名稱的列表tables。我有一個(gè) csv 的剝離文件名列表,我將使用它來(lái)將數(shù)據(jù)加載到名為 的表中l(wèi)ist_files。如果in 中的項(xiàng)目與list_filesTable 對(duì)象的 in 匹配,我想將 Table 對(duì)象中列出的列中的數(shù)據(jù)插入到關(guān)聯(lián)的 MySQL 表中 - 換句話說(shuō),我想使用列表項(xiàng)作為具有匹配名稱的 Table 對(duì)象。namemylistcols一旦弄清楚如何使用字符串list_files作為現(xiàn)有 Table 對(duì)象的名稱,我就可以構(gòu)建 INSERT 語(yǔ)句。到目前為止,這是我的代碼: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 對(duì)象,并且不確定正確的方法。
1 回答

幕布斯6054654
TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超7個(gè)贊
您可以創(chuàng)建一個(gè)字典將文件名映射到 Table 對(duì)象:
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]
添加回答
舉報(bào)
0/150
提交
取消