接ç€å‰é¢çš„例å说åQŒæˆ‘们定义了book_tableå’Œauthor_tableåQŒæŽ¥ä¸‹æ¥åQ?br /> 1 class Book(object):
 2     def __init__(self, title):
 3         self.title = title
 4     def __repr__(self):
 5         return "<Book('%s')>" % self.title
 6Â
 7 class Author(object):
 8     def __init__(self, name):
 9         self.name = name
10     def __repr__(self):
11         return "<Author('%s')>" % self.name
˜q™é‡Œæˆ‘们定义两个¾c»ï¼Œ¾l§æ‰¿è‡ªobjectåQŒç±»ä¼¼JavaBeans或者POJOåQŒè¿™é‡Œçš„__init__æ–ÒŽ(gu¨©)³•å’Œ__repr__æ–ÒŽ(gu¨©)³•䏿˜¯å¿…é¡»çš„ï¼Œåªæ˜¯ä¸ÞZº†åˆ›å¾å¯¹è±¡å’Œè¾“出对象内å®ÒŽ(gu¨©)¯”较方ä¾Ñ€‚ç„¶åŽå°±å¯ä»¥ç”¨SQLAlchemyçš„mapperå’Œsessionmakeræ¥å¾ç«‹æ˜ ž®„å…³¾pÕdÆˆå¤„ç†æŒä¹…å’ŒæŸ¥è¯¢ç‰æ“作åQ?br /> 1 from sqlalchemy.orm import mapper,sessionmaker
 2Â
 3 mapper(Book, book_table)
 4 mapper(Author, author_table)
 5Â
 6 Session = sessionmaker(bind=engine)
 7 session = Session()
 8Â
 9 gia = Book(u'Groovy in Action')
10 ag = Author(u'Andrew Glover')
11Â
12Â session.add(gia)
13Â session.add(ag)
14 session.add_all([Book('Hibernate in Action'), Author('Gavin King')])
15 s_gia = session.query(Book).filter_by(title=u'Groovy in Action').first()
16 s_gia.title =u'Groovy in Action Updated'
17Â
18 print "[DIRTY]", session.dirty
19
20Â session.commit() # or session.rollback()
å¦‚æžœä½ ç”¨˜q‡HibernateåQŒé‚£ä¹ˆè¿™äº›ä»£ç å¯¹ä½ æ¥è¯ß_¼Œç†è§£èµäh¥åº”该没有ä»ÖM½•隑ֺ¦ã€?br />
å‡å¦‚æˆ‘å‘Šè¯‰ä½ åQŒæ¯‹Æ¡éƒ½è¦åƒ˜q™æ ·å…ˆå®šä¹‰Table(schema)åQŒå†å®šä¹‰classåQŒç„¶åŽç”¨mapper建立对照åQŒæ˜¯ä¸æ˜¯æœ‰ç‚¹é‚£å•¥åQŸSQLAlchemy的开å‘者们也æ„识到˜q™ä¸€ç‚¹ï¼Œæ‰€ä»¥ä»Ž0.5开始,SQLAlchemyå¯ä»¥é€šè¿‡sqlalchemy.ext.declarativeæ”¯æŒæˆ‘们实现更紧凑的model/schema定义åQ?br /> 1 from sqlalchemy.schema import Table, Column, ForeignKey, Sequence
 2 from sqlalchemy.types import *
 3 from sqlalchemy.orm import relation
 4 from sqlalchemy.ext.declarative import declarative_base
 5Â
 6 Base = declarative_base()
 7 metadata = Base.metadata
 8Â
 9 bookauthor_table = Table('bookauthor', metadata,
10     Column('book_id', Integer, ForeignKey('book.id'), nullable=False),
11     Column('author_id', Integer, ForeignKey('author.id'), nullable=False),
12Â )
13Â
14 class Book(Base):
15Â Â Â Â Â __tablename__Â =Â 'book'
16     id = Column(Integer, Sequence('seq_pk'), primary_key=True)
17     title = Column(Unicode(255), nullable=False)
18     authors = relation('Author', secondary=bookauthor_table)
19Â
20Â
21 class Author(Base):
22Â Â Â Â Â __tablename__Â =Â 'author'
23     id = Column(Integer, Sequence('seq_pk'), primary_key=True)
24     name = Column(Unicode(255), nullable=False)
25     books = relation('Book', secondary=bookauthor_table)
˜q™é‡Œæˆ‘们用到了many-to-many关系åQŒå…¶ä»–的常è§ç”¨æ³•˜q˜åŒ…括many-to-oneã€one-to-manyã€JOINã€å查询ã€EXISTSã€Lazy/Eager Loadã€Cascade (all/delete/delete-orphan)½{‰ç‰åQŒå¤§å®¶å¯ä»¥æ ¹æ®éœ€è¦æŸ¥é˜…官æ–ÒŽ(gu¨©)–‡æ¡£ã€?br />

]]>