众所周知,SQLAlchemy提供两种方法描述表结构,我们经常见到的是一个class一个class的按顺序描述,且其中包含了对Column与各个表之间关系的详细定义,这种方法被称为“经典描述”法。而另一种更符合面向对象思路的方法能够提高代码的灵活性(虽然可能会带来代码量的增加....)。本文将这两种描述方法对比一下,从而更好的理解如何使用mapper()函数描述表结构。
首先我们来看一下经典的描述方法:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, ForeignKey
Base = declarative_base()
class User(Base):
__tablename__ = 'user'
id = Column(Integer, primary_key=True)
name = Column(String)
fullname = Column(String)
password = Column(String)
addresses = relationship("Address", backref="user", order_by="Address.id")
class Address(Base):
__tablename__ = 'address'
id = Column(Integer, primary_key=True)
user_id = Column(ForeignKey('user.id'))
email_address = Column(String)
上边的