MySQL Tablodan Veri Çekme Hatası- datetime.datetime Hatası

Merhaba,

mysql de oluşturduğum studentinfo adlı bir tablo var. Tablo içerisindeki columnlardan bilgi çekmek istediğimde class altına (host user gibi bilgileri tekrar def getStudents in altına almadan) getirmeye çalıştığımda, getStudents tanımlı değil şeklinde hata alıyorum. Class altına bu kodu nasıl alabiliirm. Ayrıca birthdate i almak istediğimde datetime.datetime is not subscritaple şeklinde hata aldım. Bunu stringe mi çevirmelyim nasıl çözebilirim.

   import mysql.connector
import datetime



mydb = mysql.connector.connect (

    host  = "localhost", 
    user = "root", 
    password = "1453",
    database = "studentapplication",

)

class Student:
    
 
    mydb = mydb
    mycursor = mydb.cursor()

    def  __init__(self, studentNumber, name, surname, birthdate, gender):
        self.studentNumber = studentNumber
        self.name = name
        self.surname = surname 
        self.birthdate = birthdate
        self.gender = gender

    def saveStudent(self):
        sql = 'INSERT INTO studentinfo (studentNumber,Name, Surname, Birthdate, Gender) VALUES (%s,%s,%s,%s,%s)'
        value = (self.studentNumber,self.name, self.surname, self.birthdate, self.gender)
        Student.mycursor.execute(sql, value)

        try:
            mydb.commit() 
            print(f' Made {Student.mycursor.rowcount} operations.')

        except mysql.connector.Error as err:
            print('error:' , err)

        finally:
            Student.mydb.close()

    


    @staticmethod
    def saveStudents(students):
        sql = 'INSERT INTO studentinfo (studentNumber,Name, Surname, Birthdate, Gender) VALUES (%s,%s,%s,%s,%s)'
        values = students
        Student.mycursor.executemany(sql, values)

        try:
            mydb.commit() 
            print(f' Made {Student.mycursor.rowcount} operations.')

        except mysql.connector.Error as err:
            print('error:' , err)

        finally:
            Student.mydb.close()

   
        



# new =  Student('1044','Michael', 'Kors', datetime.datetime(1999, 4, 25),'M' )
# new.saveStudent()



students = [

    ('105','Leydi', 'Pink', datetime.datetime(2001, 5, 10),'F' ), 

]

# mycursor.executemany(sql, students )

# Student.saveStudents(students)
def getStudents():
    
        mydb = mysql.connector.connect (host  = "localhost",user = "root", password = "1453",database = "studentapplication")
        mycursor = mydb.cursor()    
        mycursor.execute('SELECT name, birthdate FROM studentinfo')

        result = mycursor.fetchone()
        for info in result:
            print(f'name: {info[0]}  birthdate: {info[1]}')
            
getStudents()

Merhaba,

getStudents fonksiyonunda mycursor.execute('SELECT name, birthdate FROM studentinfo') gibi bir sorgu yapıyorsunuz ve mycursor.fetchone() diyorsunuz sonra. Yani bu ifadeye göre bir tane satır verisi alınacak. Sonra bir for döngüsü tanımlıyorsunuz. for döngüsünün altında bir print ifadesi var, muhtemelen orada bir hata alıyorsunuz. Çünkü info değişkeni gelen satır verisinin sütun verilerini temsil ediyor. Siz info[0] yazınca Datetime nesnesinin indis değerinin olduğunu varsaymış oluyorsunuz ve böyle bir indis değeri olmadığı için hata alıyorsunuz. fetchone yerine fetchall yazarsanız muhtemelen hata almazsınız.

        cursor.execute('SELECT name, birthdate FROM studentinfo')
        for info in cursor.fetchall():
            print(f'name: {info[0]}  birthdate: {info[1]}')

Bu arada kodunuzu şöyle düzenledim.

import mysql.connector
import datetime

connect = mysql.connector.connect(
    host="localhost",
    user="root",
    password="1453",
    database="studentapplication",
)
cursor = connect.cursor()
cursor.execute(
    "CREATE TABLE IF NOT EXISTS studentinfo"
    "(studentNumber INT, "
    "Name VARCHAR(100), "
    "Surname VARCHAR(100), "
    "Birthdate DATE, "
    "Gender VARCHAR(10))"
)


class Student:
    def __init__(self, student_number, name, surname, birthdate, gender):
        self.student_number = student_number
        self.name = name
        self.surname = surname
        self.birthdate = birthdate
        self.gender = gender

    def save_student(self):
        sql = 'INSERT INTO studentinfo ' \
              '(studentNumber, Name, Surname, Birthdate, Gender) ' \
              'VALUES (%s, %s, %s, %s, %s)'
        value = (
            self.student_number, self.name, self.surname,
            self.birthdate, self.gender
        )
        cursor.execute(sql, value)
        try:
            connect.commit()
            print(f'Made {cursor.rowcount} operations.')
        except mysql.connector.Error as err:
            print('error:', err)
        finally:
            connect.close()

    @staticmethod
    def get_students():
        cursor.execute('SELECT name, birthdate FROM studentinfo')
        for info in cursor.fetchall():
            print(f'name: {info[0]}  birthdate: {info[1]}')


students = [
    (105, 'Leydi', 'Pink', datetime.datetime(2001, 5, 10), 'F'),
]

# student = Student(*students[0])
# student.save_student()

Student.get_students()
1 Beğeni

Teşekkür ederim. @dildeolupbiten