У меня есть столбец в моей базе данных под названием coordinates
, теперь столбец координат содержит информацию о диапазоне времени, которое объект занимает в моем графике. Я хочу разрешить пользователю фильтровать по дате, но проблема в том, что я использую функцию для определения даты в обычном режиме. Возьмем:
# query_result is the result of some filter operation
for obj in query_result:
time_range, altitude_range = get_shape_range(obj.coordinates)
# time range for example would be "2006-06-01 07:56:17 - ..."
Теперь, если я хочу фильтровать по дате, я бы хотел, чтобы это был like
:
query_result = query_result.filter(
DatabaseShape.coordinates.like('%%%s%%' % date))
Но проблема в том, что мне сначала нужно применить get_shape_range
к coordinates
, чтобы получить строку. Есть ли способ сделать... Я предполагаю операцию transform_filter? Такое, что до like
происходит, я применяю некоторую функцию к координатам? В этом случае мне нужно будет написать функцию get_time_range
, которая вернула бы только время, но вопрос остается тем же.
EDIT: Здесь мой класс базы данных
class DatabasePolygon(dbBase):
__tablename__ = 'objects'
id = Column(Integer, primary_key=True) # primary key
tag = Column(String) # shape tag
color = Column(String) # color of polygon
time_ = Column(String) # time object was exported
hdf = Column(String) # filename
plot = Column(String) # type of plot drawn on
attributes = Column(String) # list of object attributes
coordinates = Column(String) # plot coordinates for displaying to user
notes = Column(String) # shape notes
lat = Column(String)
@staticmethod
def plot_string(i):
return constants.PLOTS[i]
def __repr__(self):
"""
Represent the database class as a JSON object. Useful as our program
already supports JSON reading, so simply parse out the database as
separate JSON 'files'
"""
data = {}
for key in constants.plot_type_enum:
data[key] = {}
data[self.plot] = {self.tag: {
'color': self.color,
'attributes': self.attributes,
'id': self.id,
'coordinates': self.coordinates,
'lat': self.lat,
'notes': self.notes}}
data['time'] = self.time_
data['hdfFile'] = self.hdf
logger.info('Converting unicode to ASCII')
return byteify(json.dumps(data))
и я использую sqlite 3.0. Причина, по которой большинство вещей - это строки, состоит в том, что большинство моих значений, которые должны быть сохранены в базе данных, отправляются как строки, поэтому сохранение является тривиальным. Мне интересно, должен ли я все это развить магия с функциями раньше, и просто иметь больше записей в базе данных? для таких вещей, как decimal time_begin, time_end, latitude_begin вместо строки, содержащей диапазон времени, который я анализирую, чтобы найти time_begin и time_end, когда я фильтрую