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
6 from sqlalchemy import Table, Column, MetaData, join, ForeignKey
7 from sqlalchemy.orm import relationship, backref
8 from sqlalchemy.orm import column_property
9 from sqlalchemy.orm import mapper, object_mapper
10 from sqlalchemy.orm import validates
11 from sqlalchemy import ForeignKey
13 from PLC.Storage.Alchemy import Base, engine, dbsession
14 from PLC.Storage.Record import Record
15 from PLC.Timestamp import Timestamp
16 from PLC.Logger import logger
18 class AlchemyObj(Record):
20 def __init__(self, api=None, fields = {}, object=None):
21 Record.__init__(self, dict=fields, object=object)
25 self._i = iter(object_mapper(self).columns)
29 n = self._i.next().name
30 return n, getattr(self, n)
33 metadata = MetaData(engine)
34 table = Table(self.tablename, metadata)
35 for field in self.fields:
36 param = self.fields[field]
37 # skip params joined from other tables
43 elif param.type == datetime:
45 column = Column(field, type,
46 nullable = param.nullok,
47 indexed = param.indexed,
48 primary_key=param.primary_key)
49 table.append_column(column)
50 if not table.exists():
55 table = self.get_table()
58 def insert(self, values):
59 table = self.get_table()
60 result = dbsession.execute(table.insert().values(values))
64 def updatedb(self, filter, values):
65 class Cls(object): pass
66 table = self.get_table()
67 clsmapper = mapper(Cls, table)
68 result = dbsession.query(clsmapper).filter_by(**filter).update(values)
72 def delete(self, filter={}):
73 class Cls(object): pass
74 table = self.get_table()
75 clsmapper = mapper(Cls, table)
76 result = dbsession.query(clsmapper).filter_by(**filter).delete()
80 def select(self, filter={}):
81 class Cls(object): pass
82 table = self.get_table()
83 clsmapper = mapper(Cls, table)
84 return dbsession.query(clsmapper).filter_by(**filter)