Оператор вставки Sqlalchemy не вставляется, но ошибок нетPython

Программы на Python
Anonymous
Оператор вставки Sqlalchemy не вставляется, но ошибок нет

Сообщение Anonymous »

Я пытаюсь выполнить необработанный оператор вставки SQL в Sqlalchemy, SQL Alchemy не выдает ошибок при выполнении созданного оператора вставки, но строки не появляются в базе данных.
Как насколько я могу судить, это не синтаксическая ошибка (см. № 2), это не ошибка механизма, поскольку ORM может правильно выполнить эквивалентную запись (см. № 1), он также находит таблицу, которую должен записать. (см. № 3). Я думаю, что проблема в том, что транзакция не фиксируется, и я попытался решить эту проблему (см. № 4), но это не решило проблему. Можно ли создать вложенную транзакцию и что, так сказать, начнется «первым»?
Спасибо за любые ответы.
Некоторые предыстории:
  • Я знаю, что ORM облегчает это, и использовал эту функцию, и она работает, но слишком медленно для нашего приложения. Мы решили попробовать использовать необработанный sql для этой конкретной функции записи из-за того, как часто она вызывается, а также ORM для всего остального. Эквивалентный метод с использованием ORM работает отлично, и для обоих используется один и тот же движок, так что это не может быть проблемой движка, верно?
  • Я выдал пример SQL, который метод, использующий необработанные конструкции sql, напрямую передает базу данных и который читается нормально, поэтому я не думаю, что это синтаксическая ошибка.
  • он ​​правильно взаимодействует с базой данных и может найти таблицу, поскольку любые синтаксические ошибки в именах таблиц и столбцов вызывают программную ошибку, поэтому он не просто выбрасывает данные в «пустоту», так сказать.< /p>
  • Моя первая мысль после прочтения заключалась в том, что это ошибка транзакции и что транзакция создавалась, а не закрывалась, и поэтому построил оператор выполнения. как таковой, чтобы гарантировать, что транзакция была правильно создана и зафиксирована.

    Код: Выделить всё

         with self.Engine.connect() as connection:
    connection.execute(Insert_Statement)
    connection.commit
    
  • Так называемое «Вставка оператора» было преобразовано в текст с помощью функции «текст» sqlalchemy, я не совсем понимаю, почему это не будет выполнено, если я передам созданную строку непосредственно в оператор выполнения, но упомяну об этом, если это актуально.
Другие вещи, которые могут иметь значение:
Python3 работает на отдельном экземпляре ec2, а база данных postgres — на другом. В частности, таблица представляет собой гипертаблицу с масштабированием по времени, принимающую данные в реальном времени, поэтому требуется очень быстрая запись, но, вероятно, это не актуально.
В настоящее время использование pg8000 в качестве диалекта без какой-либо конкретной причины, кроме psycopg2, выдавало ошибку. ошибки при попытке выполнить эквивалентный метод с использованием ORM.

Подробнее здесь: https://stackoverflow.com/questions/696 ... t-no-error

Вернуться в «Python»