1 from datetime import datetime
3 from sqlalchemy.ext.declarative import declarative_base
4 from sqlalchemy import Table, Column, MetaData, join, ForeignKey
5 from sqlalchemy import Column, Integer, String, TIMESTAMP
6 from sqlalchemy.orm import relationship, backref
7 from sqlalchemy.orm import column_property
8 from sqlalchemy.orm import mapper, object_mapper
9 from sqlalchemy.orm import validates
10 from sqlalchemy import ForeignKey
12 from PLC.Storage.Alchemy import Base, engine, dbsession
13 from PLC.Storage.Record import Record
14 from PLC.Timestamp import Timestamp
15 from PLC.Logger import logger
17 class AlchemyObj(Record):
19 def __init__(self, api=None, fields = {}, object=None):
20 Record.__init__(self, dict=fields, object=object)
24 self._i = iter(object_mapper(self).columns)
28 n = self._i.next().name
29 return n, getattr(self, n)
32 metadata = MetaData(engine)
33 table = Table(self.tablename, metadata)
34 for field in self.fields:
35 param = self.fields[field]
37 # skip params joined from other tables
43 elif param.type == datetime:
46 column = Column(field, type,
47 nullable = param.nullok,
48 index = param.indexed,
49 primary_key=param.primary_key,
50 default=param.default)
51 table.append_column(column)
52 if not table.exists():
59 def insert(self, values):
60 table = self.get_table()
61 result = dbsession.execute(table.insert().values(values))
65 def updatedb(self, filter, values):
66 class Cls(object): pass
67 table = self.get_table()
68 clsmapper = mapper(Cls, table)
69 result = dbsession.query(clsmapper).filter_by(**filter).update(values)
73 def delete(self, filter={}):
74 class Cls(object): pass
75 table = self.get_table()
76 clsmapper = mapper(Cls, table)
77 result = dbsession.query(clsmapper).filter_by(**filter).delete()
81 def select(self, filter={}):
82 class Cls(object): pass
83 table = self.get_table()
84 clsmapper = mapper(Cls, table)
85 return dbsession.query(clsmapper).filter_by(**filter)