1 from sqlalchemy import create_engine
3 from sqlalchemy.orm import sessionmaker
4 Session=sessionmaker ()
5 session=Session(bind=engine)
6 #session.configure(bind=engine)
8 from sqlalchemy.ext.declarative import declarative_base
9 from sqlalchemy import Column, Integer, String
10 from sqlalchemy.orm import relationship, backref
11 from sqlalchemy import ForeignKey
13 from sfa.util.sfalogger import logger
15 Base=declarative_base()
19 def __init__ (self, config):
21 # will be created lazily on-demand
23 # the former PostgreSQL.py used the psycopg2 directly and was doing
24 #self.connection.set_client_encoding("UNICODE")
25 # it's unclear how to achieve this in sqlalchemy, nor if it's needed at all
26 # http://www.sqlalchemy.org/docs/dialects/postgresql.html#unicode
27 # we indeed have /var/lib/pgsql/data/postgresql.conf where
28 # this setting is unset, it might be an angle to tweak that if need be
29 # try a unix socket first - omitting the hostname does the trick
30 unix_desc = "postgresql+psycopg2://%s:%s@:%s/%s"%\
31 (config.SFA_DB_USER,config.SFA_DB_PASSWORD,config.SFA_DB_PORT,dbname)
32 # the TCP fallback method
33 tcp_desc = "postgresql+psycopg2://%s:%s@%s:%s/%s"%\
34 (config.SFA_DB_USER,config.SFA_DB_PASSWORD,config.SFA_DB_HOST,config.SFA_DB_PORT,dbname)
35 for desc in [ unix_desc, tcp_desc ] :
37 self.engine = create_engine (engine_desc)
43 raise Exception,"Could not connect to database"
46 # expects boolean True: debug is ON or False: debug is OFF
47 def debug (self, echo):
51 self.engine.execute ("select 1").scalar()
54 def create_schema (self):
55 return Base.metadata.create_all(self.engine)
57 # does a complete wipe of the schema, use with care
58 def drop_schema (self):
59 return Base.metadata.drop_all(self.engine)
62 if self._session is None:
63 Session=sessionmaker ()
64 self._session=Session(bind=self.engine)
67 def close_session (self):
68 if self._session is None: return
73 self.session().commit()
75 def insert (self, stuff, commit=False):
76 if isinstance (stuff,list):
77 self.session().add_all(stuff)
79 self.session().add(obj)
81 # for compat with the previous PostgreSQL stuff
82 def update (self, record):
85 def remove (self, record):