Я пытаюсь использовать datastore_api в CKAN (ckan.org) и хочу удалить все записи с идентификатором выше X - моя цель - просто удалить ВСЕ записи без удаление таблицы.Удалить все записи с идентификатором выше X в CKAN
Запуск в API с
'filters': {'_id': '0'}
делает работу, но настройка
{'_id': '>0'}
или
{'_id': '*'} fails.
Как я могу удалить таблицу в хранилище данных, не удаляя таблицу?
SQL, генерируется в CKAN является:
...9b89-7ab1c36c8e00" WHERE ("_id" = '*') ...
Так что имеет смысл, почему это не удается, но я не знаю, как использовать API вызовы с либо групповыми символами или «выше».
Это, кажется, код:
def delete_data(context, data_dict):
validate(context, data_dict)
fields_types = _get_fields_types(context, data_dict)
query_dict = {
'where': []
}
for plugin in p.PluginImplementations(interfaces.IDatastore):
query_dict = plugin.datastore_delete(context, data_dict,
fields_types, query_dict)
where_clause, where_values = _where(query_dict['where'])
sql_string = u'DELETE FROM "{0}" {1}'.format(
data_dict['resource_id'],
where_clause
)
_execute_single_statement(context, sql_string, where_values)
...
def _where(where_clauses_and_values):
'''Return a SQL WHERE clause from list with clauses and values
:param where_clauses_and_values: list of tuples with format
(where_clause, param1, ...)
:type where_clauses_and_values: list of tuples
:returns: SQL WHERE string with placeholders for the parameters, and list
of parameters
:rtype: string
'''
where_clauses = []
values = []
for clause_and_values in where_clauses_and_values:
where_clauses.append('(' + clause_and_values[0] + ')')
values += clause_and_values[1:]
where_clause = u' AND '.join(where_clauses)
if where_clause:
where_clause = u'WHERE ' + where_clause
return where_clause, values
Вы прочитали соответствующий бит кода? –
Добавленный комментарий в вопрос ... –