2015-03-03 1 views
0

Я использую Python3.4 и CQLEngine. В моем коде, я спасаю объект в перегруженном операторе сохранения следующим образом: Как узнать, внесли ли CQLEngine вставку или обновление через класс модели Сохранить

Class Foo(Model, ...): 
    id = columns.Integer(primary_key)=True 
    bar = column.Text() 
    ... 

    def save(self): 
     super(Foo, self).save() 

, и я хотел бы знать, если сохранить() делают вставку или обновление с возвращения функции сохранения ,

ответ

1

INSERT и UPDATE являются синонимами в Кассандре за очень небольшим исключением. Вот description of INSERT, где кратко затрагивает различие:

Вкладыш пишет один или несколько столбцов для записи в таблице Кассандры атомарной и в изоляции. Результаты не возвращаются. У вас нет , чтобы определить все столбцы, кроме тех, которые составляют ключ. Недостающие столбцы не занимают места на диске.

Если столбец существует, он обновляется. Вы можете квалифицировать имена таблиц на keypace. INSERT не поддерживает счетчики, но UPDATE делает. Внутренние операции вставки и обновления идентичны.

Вы не знаете, будет ли это вставка или обновление, и вы можете смотреть на нее так, как если бы это был запрос сохранения данных, тогда координатор определяет, что это такое.

Это отвечает на ваш первоначальный вопрос - вы не можете знать, основываясь на возврате функции сохранения, будь то вставка или обновление.

Ответ на ваш комментарий ниже, в котором объясняется, почему вы хотели получить этот вывод: вы не можете надежно получить эту информацию из Cassandra, но вы можете использовать легкие транзакции в определенной степени и запускать 2 заявления последовательно с помощью одни и те же строки данных:

INSERT ... IF NOT EXISTS следуют UPDATE ... IF EXISTS

в целевой таблице вам нужно будет иметь столбец, где каждый из этих операторов будет записывать значение уникального для каждого вызова. Затем вы можете выбрать данные на основе первичных ключей вашего набора данных и посмотреть, сколько у каждого из них значений. Это примерно скажет вам, сколько обновлений и сколько вставок было там. Однако из-за каких-либо параллельных процессов они могли перезаписать ваши данные своими токенами, поэтому этот метод не будет очень точным и будет работать (как и любой другой метод с базами данных, например Cassandra), только если нет параллельных процессов.

+0

К сожалению, для моего приложения мне нужно сохранить количество включений/обновлений/ошибок, чтобы данные могли быть подтверждены, поэтому этот подход не очень помогает –

+0

Это не подход, а просто объяснение ограничений Кассандра, которые не допускают такого рода использования. –

 Смежные вопросы

  • Нет связанных вопросов^_^