0
考慮下面的代碼定義了一些類:使用類獲取對象的屬性在SQLAlchemy的
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, Float, String, DateTime
from sqlalchemy import ForeignKey, UniqueConstraint
from sqlalchemy.orm import relationship, backref
class Base(object):
id = Column(Integer, primary_key=True)
Base = declarative_base(cls=Base)
class Teacher(Base):
__tablename__ = 'teacher'
email = Column(String, unique=True)
name = Column(String, nullable=False)
password = Column(String)
base_score = Column(Float)
time_zone = Column(String)
def __repr__(self):
return '<Teacher({0})>'.format(self.email)
class Class(Base):
__tablename__ = 'class'
teacher_id = Column(Integer, ForeignKey('teacher.id', ondelete="CASCADE"), nullable=False, index=True)
Teacher = relationship("Teacher", backref=backref('classes', order_by='Class.id'))
name = Column(String, index=True)
__table_args__ = (UniqueConstraint('teacher_id','name'),)
def __repr__(self):
return '<Class({0})>'.format(self.name)
class Student(Base):
__tablename__ = 'student'
class_id = Column(Integer, ForeignKey('class.id', ondelete="CASCADE"), nullable=False, index=True)
Class = relationship("Class", backref=backref('students', order_by='Student.id'))
name = Column(String, index=True)
__table_args__ = (UniqueConstraint('class_id','name'),)
def __repr__(self):
return '<Student({0})>'.format(self.name)
以下代碼:
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
engine = create_engine('sqlite:///:memory:', echo=True)
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
t = Teacher(email='[email protected]',name='Cool Guy',base_score=100,time_zone='America/Chicago')
c1 = Class(Teacher=t,name='Mathematics')
s1 = Student(Class=c1,name='Bob Roberts')
首先,我想知道定義c1就像這是正確的方式(使用老師的參數)
其次,我知道我是否可以通過這樣做讓學生的老師:
s1.Class.Teacher
但無論如何(這是正常的),直接在學生類創建一個教師屬性?我嘗試添加:
Teacher = Class.Teacher
在類的定義,但拋出:
AttributeError: 'RelationshipProperty' object has no attribute 'Teacher'
很顯然,這不是什麼大不了的事,但我想知道正確的方式(如果有的話,或者說沒有一個),因爲我試圖更好地學習sqlalchemy。