Difference between revisions of "ExampleStore Python"
From the Directed Edge Developer Base
Line 1: | Line 1: | ||
+ | :'''Note:''' You will need to change the usernames / passwords in the <tt>ExampleStore</tt> constructor. | ||
+ | |||
:''Comments will follow, but the flow is identical to the [[Ruby Bindings for E-Commerce Tutorial]]''. | :''Comments will follow, but the flow is identical to the [[Ruby Bindings for E-Commerce Tutorial]]''. | ||
− | |||
<source lang="python"> | <source lang="python"> |
Latest revision as of 17:01, 28 January 2010
- Note: You will need to change the usernames / passwords in the ExampleStore constructor.
- Comments will follow, but the flow is identical to the Ruby Bindings for E-Commerce Tutorial.
#!/usr/bin/python
from sqlalchemy import Column, Integer, create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from directed_edge import Exporter, Item, Database
Base = declarative_base()
class Customer(Base):
__tablename__ = "customers"
id = Column(Integer, primary_key=True)
class Product(Base):
__tablename__ = "products"
id = Column(Integer, primary_key=True)
class Purchase(Base):
__tablename__ = "purchases"
customer = Column(Integer, primary_key=True)
product = Column(Integer, primary_key=True)
class ExampleStore(object):
def __init__(self):
self.database = Database("examplestore", "password")
engine = create_engine("mysql://examplestore:password@localhost/examplestore")
Session = sessionmaker(bind=engine)
self.session = Session()
def export_from_mysql(self):
exporter = Exporter("examplestore.xml")
for product in self.session.query(Product):
item = Item(exporter.database, "product%s" % product.id)
item.add_tag("product")
exporter.export(item)
for customer in self.session.query(Customer):
item = Item(exporter.database, "customer%s" % customer.id)
item.add_tag("customer")
for purchase in self.session.query(Purchase).filter_by(customer=customer.id):
item.link_to("product%s" % purchase.product)
exporter.export(item)
exporter.finish()
def import_to_directededge(self):
self.database.import_from_file("examplestore.xml")
def create_customer(self, id):
item = Item(self.database, "customer%s" % id)
item.add_tag("customer")
item.save()
def create_product(self, id):
item = Item(self.database, "product%s" % id)
item.add_tag("product")
item.save()
def add_purchase(self, customer_id, product_id):
item = Item(self.database, "customer%s" % customer_id)
item.link_to("product%s" % product_id)
item.save()
def related_products(self, product_id):
item = Item(self.database, "product%s" % product_id)
return [related.replace("product", "") for related in item.related(["product"])]
def personalized_recommendations(self, customer_id):
item = Item(self.database, "customer%s" % customer_id)
return [related.replace("product", "") for related in item.recommended(["product"])]
store = ExampleStore()
store.export_from_mysql()
store.import_to_directededge()
store.create_customer(1000)
store.create_product(1000)
store.add_purchase(1000, 1000)
print store.related_products(2)
print store.personalized_recommendations(2)