class Movie(object): def __repr__(self): string = "" if self.mid is not None: string += "mid: %d " % int(self.mid) if self.original_name is not None: string += "original_name: '%s' " % self.original_name if self.finnish_name is not None: string += "finnish_name: '%s' " % self.finnish_name if self.year is not None: string += "year: %d " % int(self.year) if self.url is not None: string += "url: %s " % self.url if self.imdb_url is not None: string += "imdb_url: %s " % self.imdb_url return string class MovieCategory(object): pass class DBAccess: def __init__(self): self.db = create_engine(\ 'postgres://XX:YY@localhost:5432/ZZ',\ encoding="utf8") self.metadata = BoundMetaData(self.db) self.initMappings() def initMappings(self): self.category_table = Table('movie_category', self.metadata, autoload=True) mapper(MovieCategory, self.category_table) self.movies_categories_table = Table('movies_categories', self.metadata, Column('mid', Integer, ForeignKey("movie.mid")), Column('mcid', Integer, ForeignKey("movie_category.mcid"))) self.movie_table = Table('movie', self.metadata, autoload=True) #mapper(Movie, self.movie_table) moviemapper = mapper(Movie, self.movie_table, properties = dict( categories = relation(MovieCategory, secondary=self.movies_categories_table, lazy=False))) def findMovies(self, moviesearch): session = create_session(bind_to=self.db) query = session.query(Movie) statement = self.movie_table.select() if moviesearch.finnishTitle is not None: statement.append_whereclause(func.lower(self.movie_table.c.finnish_name) == moviesearch.finnishTitle.lower()) if moviesearch.yearStart is not None: statement.append_whereclause(self.movie_table.c.year >= moviesearch.yearStart) if moviesearch.yearEnd is not None: statement.append_whereclause(self.movie_table.c.year <= moviesearch.yearEnd) if moviesearch.imdbID is not None: statement.append_whereclause(or_(func.lower(self.movie_table.c.url).like('%' + moviesearch.imdbID + '%'), func.lower(self.movie_table.c.imdb_url).like('%' + moviesearch.imdbID + '%'))) db = getdb() def findIdFromMovietronDB(movieSearch): global db movies = db.findMovies(movieSearch) if movies and len(movies) > 0: movie = movies[0] #print movie.finnish_name for c in movie.categories: print c return movies[0].mid return None