Solved

AttributeError: 'str' object has no attribute 'student_id'

Posted on 2006-07-20
2
5,991 Views
Last Modified: 2013-11-19
Hi All,
Sorry if a similar question has been asked before and answered.

I am trying to write a piece that will read from a file and populate the file content into various tables in a database.

I started of in creating a module for creating my database tables and the insert statements as well,  The main program starts of nicely to read from the file after input 'yes' at the prompt to read from the file, and the file content printed to indicate that the file has been read successfully.


Now when I get to the bit that I want to insert into a database table with the content read from the file, I get the Error:

------------------------------

Traceback (most recent call last):
  File "C:\Python24\prototype1.py", line 112, in -toplevel-
    main()
  File "C:\Python24\prototype1.py", line 109, in main
    surgery.menudisplay()
  File "C:\Python24\prototype1.py", line 98, in menudisplay
    self.addstudent() # later development, check that the student is not already in the database
  File "C:\Python24\prototype1.py", line 68, in addstudent
    databasemodule.insertStudent(self.getSID(), self.email, 's')
  File "C:\Python24\databasemodule.py", line 20, in insertStudent
    self.student_id = 'k0212653'
AttributeError: 'str' object has no attribute 'student_id'
----------------------

please find my actual codes below as well.
Module Database Code:
global connection
connection = sqlite.connect('Surgery.db')
global cursor
cursor = connection.cursor()

    #declaring methods for the databases and the statements needed
def createStudent():
    cursor.execute('CREATE TABLE Students(Student_ID VARCHAR(8) PRIMARY KEY, EmailAddress VARCHAR(50))')

def createLecturer():
    cursor.execute('CREATE TABLE Lecturer(Lecturer_ID VARCHAR(8) PRIMARY KEY, EmailAddress VARCHAR(50))')
def createSlot(self):
    cursor.execute('CREATE TABLE Slot(Slot_ID VARCHAR(6) PRIMARY KEY, Time DateTime, Date DateTime, StudentID NOT NULL REFERENCES "Studnets"("Student_ID"), id NOT NULL REFERENCES "Lecture"("Lecturer_ID"))')

def insertStudent(self, student_id, email):
    self.student_id = student_id
    self.email = email
    cursor.execute('INSERT INTO Students VALUES(?, ?)',(self.student_id, self.email))
#def insertnew(self, ai, aem):
#    self.s_id = s_id
#    self.email = email
#    cursor.execute('INSERT INTO Students VALUES(?, ?)',(ai, aem))

def insertLecturer(self, l_id, email):
    self.l_id = l_id
    self.email = email
    cusor.execute('INSERT INTO Lecturer VALUES(?, ?)', (self.l_id, self.email))

def insertSlot(self, slotid, time, date, s_id, l_id):
    self.slotid = slotid
    self.time = time
    self.date = date
    self.s_id = s_id
    self.l_id = l_id
    cursor.execute('INSERT INTO Slot VALUES(?, ?, ?, ?, ?)',(self.slotid, self.time, self.date, self.s_id, self.l_id))
........................................


from string import split
import string
import databasemodule

#
class Surgery:
#    global mydbmodule
#    mydbmodule = Databases
    #global myfile
    def __init__(self, title, l_id, s_id, message ):
        self.title = title
        self.l_id = l_id
        self.s_id = s_id
        self.message = message
       
    def getTitle(self):
        return self.title
    def setTitle(self, value):
        self.title = value

    def getLID(self):
        return self.l_id
    def setLID(self, value):
        self.l_id = value

    def getSID(self):
        return self.s_id
    def setSID(self, value):
        self.s_id = value

    def getMessage(self):
        return self.message
    def setMessage(self, value):
        self.message = value
           

    # read each line and seperate the worlds  in the file
    def lineread(self):
        try:
            myfile = open('studentmessage.txt', 'r')
        except IOError:
            print "The file you are trying to open does not exist, Bye!"
        for line in myfile.readlines():
            keyword = split(line, ' ')[0]
            self.setTitle(keyword)
            l_id = split(line, ' ')[1]
            self.setLID(l_id)
            u_id = split(line, ' ')[2]
            self.setSID(u_id)
            detail = split(line, ' ')[3] + ' ' + split(line, ' ')[4]
            self.setMessage(detail)
            print "Title : ", self.getTitle(), "name : ", self.getLID(), "Student ID : ", self.getSID(), "message : ", self.getMessage()

        myfile.close()
   

# write into the database what has been read from the file
    def addstudent(self):
        print (self.getSID())
       
        self.email = self.getSID() + "@kingston.ac.uk"
        databasemodule.insertStudent(self.getSID(), self.email, 's')
        #mydbmodule.insertStudent(self.getSID(), self.email)
    def addlecturer(self):
        self.email = self.getLID() + "@kingston.ac.uk"
        databasemodule.insertLecturer(self.getSID(), self.email, 'l')
        #databasemodule.databasemodule.insertStudent(self.getSID(), email)
       

#menu display

    def menudisplay(self):
       
       # s = raw_input('create database : ')
       # if s=='yes':
            #databasemodule.createStudent()
       #     databasemodule.createLecturer()
       try:
           file_input = raw_input('Read from File? yes/no : ')
           if file_input =='yes':
               self.lineread()
           else:
               print('No Action Taken, Thank You')
               #break
       
       except TypeError:
           print "Input not acceptable!"
                   
       try:
           input = raw_input('update database? yes/no : ')
           if input =='yes':
               self.addstudent() # later development, check that the student is not already in the database
               self.addlecturer()
           else:
               print("the database has not been updated")
               #break
       
       except TypeError:
           print "Input not acceptable!"
                           
def main():
    surgery = Surgery('','','','')
    surgery.menudisplay()


main()
....................................

Your help and advice is much appreciated.

Kind Regards

Eric
0
Comment
Question by:eryckop
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
2 Comments
 
LVL 14

Accepted Solution

by:
RichieHindle earned 250 total points
ID: 17144755
"def insertStudent(self, student_id, email):" - this is a plain function, not a method of a class, so calling the first parameter 'self' is misleading.  Then when you call it: "databasemodule.insertStudent(self.getSID(), self.email, 's')" you pass in a string as the first parameter, but you then try to add an arbitrary attribute to that string: "self.student_id = student_id".

It looks to me as though your databasemodule code should look like this:

def insertStudent(student_id, email):
    cursor.execute('INSERT INTO Students VALUES(?, ?)',(student_id, email))

There is no 'self', and no need for one.
0
 

Author Comment

by:eryckop
ID: 17145446
Thanks very much Richieidle, your expert advice has saved me a lot of time.

Thanks once a again.

Regards,
Eric
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

I found this questions asking how to do this in many different forums, so I will describe here how to implement a solution using PHP and AJAX. The logical flow for the problem should be: Write an event handler for the first drop down box to get …
Article by: Swadhin
Introduction of Lists in Python: There are six built-in types of sequences. Lists and tuples are the most common one. In this article we will see how to use Lists in python and how we can utilize it while doing our own program. In general we can al…
Viewers will learn about if statements in Java and their use The if statement: The condition required to create an if statement: Variations of if statements: An example using if statements:
The viewer will learn how to create a basic form using some HTML5 and PHP for later processing. Set up your basic HTML file. Open your form tag and set the method and action attributes.: (CODE) Set up your first few inputs one for the name and …
Suggested Courses

626 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question