2016-07-31 53 views
0

我想创建一个SQL表,它由此运行(这是和SQL文件,我在我的代码'1-fake-mentor-candidates.sql'结束时调用)我尝试创建包含来自随机元素的10000行的SQL表。它给了我一个错误

CREATE TABLE "mentor_candidates" (
    first_name varchar(255) NOT NULL, 
    last_name varchar(255) NOT NULL, 
    phone_number varchar(100) NOT NULL, 
    email varchar(255) NOT NULL, 
    city varchar(255) NOT NULL, 
    level integer NOT NULL, 
    birth_year integer NOT NULL 
); 

这是我的课,应该创造我的表,但它给我回一个错误信息: 回溯(最近通话最后一个):

文件“fake-mentor-candidates.py”第39行,在

FakeMentors.write_sql_file('1-fake-mentor-candidates.sql')

文件“fake-mentor-candidates.py”,第35行,在write_sql_file中 + cls.level +“);”

AttributeError的:对象类型 'FakeMentors' 有没有属性 'FIRST_NAME'

class FakeMentors: 

first_name_to_pick = ['Attila', 'Prezmek', 'John', 'Tim', 'Matthew', 'Andy', 'Giancarlo'] 
last_name_to_pick = ['Monoczki', 'Szodoray', 'Ciacka', 'Carrey', 'Obama', 'Lebron', 'Hamilton', 'Fisichella'] 
city_to_pick = ['Budapest', 'Miskolc', 'Krakow', 'Barcelona', 'New York'] 
phonenumber_to_pick = ['30', '20', '70'] 

def __init__(self): 
    self.first_name = random.choice(self.first_name_to_pick) 
    self.last_name = random.choice(self.last_name_to_pick) 
    self.birth_year = random.randint(1960, 1995) 
    self.email = self.first_name + self.last_name + str(random.randint(1, 100)) + '@codecool.com' 
    self.city = random.choice(self.city_to_pick) 
    self.phone_number = '+36' + self.random.choice(phonenumber_to_pick) + str(random. randint(100000, 999999)) 
    self.level = random.randint(1, 10) 


@classmethod 
def write_sql_file(cls, sql_file): 
    with open(sql_file, 'w') as my_file: 
     my_file.write('TRUNCATE TABLE mentor_candidates;\nBEGIN TRANSACTION;\n') 
     for row in range(0, 10000): 
      sql_line = "INSERT INTO \"mentor_candidates\" "\ 
         + "(first_name,last_name,birth_year,email,city,phone_number,level) "\ 
         + "VALUES"\ 
         + "(\'" + cls.first_name + "\',"\ 
         + "\'" + cls.last_name + "\',"\ 
         + cls.birth_year + ","\ 
         + "\'" + cls.email + "\',"\ 
         + "\'" + cls.city + "\',"\ 
         + "\'" + cls.phone_number + "\',"\ 
         + cls.level + ");" 
      my_file.write(line + '\n') 
     my_file.write("END TRANSACTION;\n") 

FakeMentors.write_sql_file('1-fake-mentor-candidates.sql') 

我在做什么错在这里? :/

+0

我做到了!这是在标语 – dmbdnr

回答

1

您试图访问classmethod中的实例属性。您需要创建实例:

class FakeMentors: 
    first_name_to_pick = ['Attila', 'Prezmek', 'John', 'Tim', 'Matthew', 'Andy', 'Giancarlo'] 
    last_name_to_pick = ['Monoczki', 'Szodoray', 'Ciacka', 'Carrey', 'Obama', 'Lebron', 'Hamilton', 'Fisichella'] 
    city_to_pick = ['Budapest', 'Miskolc', 'Krakow', 'Barcelona', 'New York'] 
    phonenumber_to_pick = ['30', '20', '70'] 

    def __init__(self): 
     self.first_name = random.choice(self.first_name_to_pick) 
     self.last_name = random.choice(self.last_name_to_pick) 
     self.birth_year = random.randint(1960, 1995) 
     self.email = self.first_name + self.last_name + str(random.randint(1, 100)) + '@codecool.com' 
     self.city = random.choice(self.city_to_pick) 
     self.phone_number = '+36' + self.random.choice(phonenumber_to_pick) + str(random. randint(100000, 999999)) 
     self.level = random.randint(1, 10) 

    @classmethod 
    def write_sql_file(cls, sql_file): 
     with open(sql_file, 'w') as my_file: 
      my_file.write('TRUNCATE TABLE mentor_candidates;\nBEGIN TRANSACTION;\n') 
      for row in range(0, 10000): 
       entry = cls() 
       my_file.write(('INSERT INTO "mentor_candidates" ' 
         + "(first_name,last_name,birth_year,email,city,phone_number,level) " 
         + "VALUES" 
         + "('{0.first_name}', '{0.last_name}', {0.birth_year}," 
         + "'{0.email}','{0.city}','{0}.phone_number}',{0.level});\n").format(entry)) 
      my_file.write("END TRANSACTION;\n") 

FakeMentors.write_sql_file('1-fake-mentor-candidates.sql') 
+0

非常感谢你! – dmbdnr

相关问题