====== Getting Started ======
===== Connection =====
In [1]: from sqlalchemy import *
In [2]: engine = create_engine('postgres://database=k4ml&host=127.0.0.1&user=kamal&password=any')
===== Database Metadata =====
In [3]: nodes = Table('node', engine, autoload=True)
In [4]: [c.name for c in nodes.columns]
Out[4]:
['nid',
'type',
'title',
'uid',
'status',
'created',
'changed',
'comment',
'promote',
'moderate',
'teaser',
'body',
'revisions',
'sticky',
'format']
===== Database Manipulation =====
In [5]: nodes.select()
Out[5]:
In [6]: str(nodes.select())
Out[6]: 'SELECT node.nid, node.type, node.title, node.uid, node.status, node.created, node.changed, node.comment, node.promote, node.moderate, node.teaser, node.body, node.revisions, node.sticky, node.format \nFROM node'
In [7]: n1 = nodes.select().execute()
In [8]: n1.fetchone()
In [9]: row = n1.fetchone()
In [10]: row[0]
Out[10]: 20
In [11]: row[1]
Out[11]: 'story'
In [12]: row['title']
Out[12]: 'Sun Mad Hatter ..'
n [17]: n1 = nodes.select(nodes.c.nid == 123)
In [18]: str(n1)
Out[18]: 'SELECT node.nid, node.type, node.title, node.uid, node.status, node.created, node.changed, node.comment, node.promote, node.moderate, node.teaser, node.body, node.revisions, node.sticky, node.format \nFROM node \nWHERE node.nid = %(node_nid)s'
In [19]: n1 = nodes.select(nodes.c.nid == 123).execute()
===== Code - Database=====
from sqlalchemy import *
engine = create_engine('postgres://database=clinic-models&host=127.0.0.1&user=kamal&password=any', echo=True, echo_uow=True)
customers = Table('customers', engine, autoload=True)
orders = Table('orders', engine, autoload=True)
items = Table('items', engine, autoload=True)
order_items = Table('order_items', engine, autoload=True)
===== Code - Models =====
import database
class Customers(object):
pass
database.assign_mapper(Customers, database.customers)
class Orders(object):
pass
database.assign_mapper(Orders, database.orders)
class Items(object):
pass
database.assign_mapper(Items, database.items)
class OrderItems(object):
def _set_item_id(self, item_id):
self._item_id = item_id
self.calc_total_price()
item_id = property(fset=_set_item_id)
def _set_qty(self, qty):
self._qty = qty
self.calc_total_price()
def _get_qty(self):
return self._qty
qty = property(_get_qty, _set_qty)
def _get_total_price(self):
if hasattr(self, '_total_price'):
return self._total_price
return None
total_price = property(_get_total_price)
def calc_total_price(self):
if hasattr(self, '_qty') and isinstance(self.qty, int):
if hasattr(self, '_item_id'):
item_price = database.select(
[database.items.c.price], database.items.c.id == self._item_id
).execute().fetchone()[0]
self._total_price = self._qty * item_price
database.assign_mapper(OrderItems, database.order_items, properties = {
'_item_id': database.order_items.c.item_id,
'_qty': database.order_items.c.qty,
'_total_price': database.order_items.c.total_price,
}
)