python sqlAlchemy实例关系

#!/usr/bin/python
#
-*- encoding:utf-8 -*-
from sqlalchemy import *
from sqlalchemy.orm import *
engine=create_engine("sqlite:///./test.db")
metadata=MetaData()
party=Table('party',metadata,
Column('id',Integer,primary_key=True),
Column('name',String(32),nullable=False),
Column('type',String(32),nullable=False),
)
person=Table('person',metadata,
Column('id',Integer,ForeignKey('party.id'),primary_key=True),
Column('sex',String(16),nullable=False),
)
org=Table('org',metadata,
Column('id',Integer,ForeignKey('party.id'),primary_key=True),
Column('capital',Integer,nullable=False),
Column('manager_id',Integer,ForeignKey('person.id'),nullable=False ),
)
#每个机构有一个manager,每个人可以兼多个机构manager

usr=Table('usr',metadata,
Column('id',Integer,primary_key=True),
)

metadata.drop_all(engine)
metadata.create_all(engine)

class Party(object):
pass

class Org(Party):
pass
class Person(Party):
pass

mapper(Party,party,polymorphic_on=party.c.type,
polymorphic_identity="party")

mapper(Org,org,inherits=Party,
polymorphic_identity="org",
properties={
'manager':relationship(Person,primaryjoin=person.c.id==org.c.manager_id,backref='manage_orgs'),
},)
mapper(Person,person,inherits=Party,
polymorphic_identity="person",
)


o=Org()
o1=Org()
p=Person()
p.name=u"周剑"
p.sex=u''

o.name=u'测试机构'
o.capital=200
o.manager=p

o1.name=u'测试机构 乙方'
o1.capital=200
o1.manager=p

Session=sessionmaker(bind=engine)
s=Session()

s.add(p)
s.add(o)
s.add(o1)
s.commit()

print dir(s)
c=0

for r in s.query(Party).all():
if type(r) == Org:
print r.id,r.name,r.capital,r.manager.name
else:
print r.id,r.name
for m in r.manage_orgs:
print u"\t管理了 "+m.name
s.commit()
原文地址:https://www.cnblogs.com/wuxi/p/2289085.html