Как написать генеративное обновление в SQLAlchemy - PullRequest
2 голосов
/ 12 февраля 2012

Я просто использую ядро ​​SQLAlchemy и не могу получить sql, чтобы разрешить мне добавлять предложения where.Я хотел бы, чтобы этот очень общий код обновления работал на всех моих таблицах.Намерение состоит в том, что это является частью общей функции вставки / обновления, которая соответствует каждой таблице.Делая это таким образом, вы получаете чрезвычайно короткий тестовый код и простые утилиты CLI, которые могут просто передавать все аргументы и параметры без сложности отдельных подкоманд для каждой таблицы.

Это займет еще несколько настроекчтобы получить его там, но делать обновления сейчас просто отлично.Однако, хотя SQLAlchemy относится к генеративным запросам, он не различает выборки и обновления.Я просмотрел документацию по SQLAlchemy, Essential SQLAlchemy, stackoverflow и несколько репозиториев исходного кода и ничего не нашел.

u      = self._table.update()
non_key_kw = {}
for column in self._table.c:
    if column.name in self._table.primary_key:
        u.where(self._table.c[column.name] == kw[column.name])
    else:
        col_name = column.name
        non_key_kw[column.name] = kw[column.name]

print u
result = u.execute(kw)

Что не получается - похоже, он не распознает предложение where:

UPDATE struct SET year=?, month=?, day=?, distance=?, speed=?, slope=?, temp=?
FAIL

И я не могу найти никаких примеров создания обновления таким способом.Любые рекомендации?

1 Ответ

1 голос
/ 14 февраля 2012

метод where () является генеративным в том смысле, что он возвращает новый объект Update(). Старый не изменен:

u = u.where(...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...