为什么类实例在初始化时返回None

时间:2013-12-12 06:06:40

标签: python sqlalchemy

我有一个课程如下

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()

class Student(Base):
    __tablename__ = 'students'

    student_id = Column(Integer, primary_key=True)
    address = Column(String)
    name = Column(String)

    def __init__(self, address, name):
        self.address = address
        self.name = name

以下是我的电话

def test_Student(self):
        from School.Student import Student
    address = 'India'
        name = 'Team A'

        student = Student(address,name)
        print student.student_id

student.student_id is returning None

为什么它返回None?我应该将测试用例写成assertIsNone

2 个答案:

答案 0 :(得分:3)

您的student对象是transient,并且数据库中没有任何标识。假设student_id是自动生成的,它将为None,直到您在会话中保留此对象为止。

session.add(student)
session.flush()

但是,如果您正在编写测试,请注意不要提交会话(因此将测试数据添加到数据库中)。这将涉及为每个测试打开一个新事务,并在测试结束时将其回滚

答案 1 :(得分:1)

您需要先保存学生才能获得自动增量ID。

session.add(student)