def executescript(filename): """指定されたファイル名のSQLスクリプトを読み込んで実行します。""" conn = None try: conn = connection() conn.execute(_read_file(filename), noresult=True) conn.commit() except: if conn: conn.rollback() raise finally: close_connection()
def search(cls, char=None, win_lose=None, stage=None, span=None, version=None, page=1, limit=25): """試合を取得します。""" exp = [] if span: from helpers import get_current_datetime exp.append(cls.created_at >= get_current_datetime() - datetime.timedelta(days=int(span))) if stage: exp.append(cls.stage == stage) if version: exp.append(cls.version == version) if win_lose: assert char win_lose = int(win_lose) if 1 == win_lose: exp.append( Or( And(cls.home == char, cls.result == cls.RESULT_HOME), And(cls.away == char, cls.result == cls.RESULT_AWAY), ) ) elif 2 == win_lose: exp.append( Or( And(cls.home == char, cls.result == cls.RESULT_AWAY), And(cls.away == char, cls.result == cls.RESULT_HOME), ) ) else: raise ValueError() elif char: exp.append(Or(cls.home == char, cls.away == char)) q = connection().find(cls, *exp) q.order_by(Desc(cls.created_at)) return cls.build_pager_params(q, page, limit)
def get_or_insert(cls, source, **kwds): try: params = cls.parse(source) except Exception: raise ParseError() db = connection() obj = cls.get_by_etag(params['etag']) if obj: return obj obj = cls() obj.apply(**kwds) obj.apply(**params) db.add(obj) match_data = MatchData() match_data.match = obj match_data.raw_data = source db.add(match_data) db.commit() return obj
def get_by_id(cls, id): return connection().get(cls, id)
def all(cls, page=1, limit=25): """全ての試合を取得します。""" q = connection().find(cls) q.order_by(Desc(cls.created_at)) return cls.build_pager_params(q, page, limit)
def get_by_etag(cls, value): return connection().find(cls, cls.etag == (value if isinstance(value, unicode) else value.decode('utf-8')) ).config(limit=1).any()