嗯,标题比我想象的要难。在
基本上,我使用SQLAlchemy将这些简单的类映射到表。我知道他们漏掉了一些东西,但这些不是突出问题的必要条件。在
class Customer(object):
def __init__(self, uid, name, email):
self.uid = uid
self.name = name
self.email = email
def __repr__(self):
return str(self)
def __str__(self):
return "Cust: %s, Name: %s (Email: %s)" %(self.uid, self.name, self.email)
上面的基本上是一个简单的客户,有一个id、姓名和一个电子邮件地址。在
^{pr2}$这是Orders
类,它只保存订单信息:id、名称和对客户的引用。它被初始化为None
,表示该项还没有客户。代码的作业将为项目分配客户。在
下面的代码将这些类映射到相应的数据库表。在
# SQLAlchemy database transmutation
engine = create_engine('sqlite:///:memory:', echo=False)
metadata = MetaData()
customers_table = Table('customers', metadata,
Column('uid', Integer, primary_key=True),
Column('name', String),
Column('email', String)
)
orders_table = Table('orders', metadata,
Column('item_id', Integer, primary_key=True),
Column('item_name', String),
Column('customer', Integer, ForeignKey('customers.uid'))
)
metadata.create_all(engine)
mapper(Customer, customers_table)
mapper(Order, orders_table)
现在如果我做一些类似的事情:
for order in session.query(Order):
print order
我可以用这个表格得到订单清单:
Item ID 1001: MX4000 Laser Mouse, has been ordered by customer no. 12
我要做的是找出客户12的姓名和电子邮件地址(这就是为什么我在customer表中使用ForeignKey)。我该怎么做呢?在
根据我的评论更新
我知道这似乎有点没用,但我只是想知道:我该怎么做才能保持这种关系的单向性?在
另外,如果我有另一个外键进入另一个表?如何更新映射器?在
首先,如果确实要将customer传递给Order构造函数,那么至少要使用它。 我建议使用默认值,但仍允许在创建时分配给客户,如下所示:
为了使您的关系正常工作,您必须初始化关系 在对象之间,FK是不够的。我建议您更改代码如下(摘录):
^{pr2}$然后,您可以从订单导航到客户,然后返回:
相关问题 更多 >
编程相关推荐