예제 #1
0
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()
예제 #2
0
 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)
예제 #3
0
 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
예제 #4
0
 def get_by_id(cls, id):
   return connection().get(cls, id)
예제 #5
0
 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)
예제 #6
0
 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()